在PHP和JavaScript中使用相同的正则表达式检查值是否为布尔值?

Eri*_*ric 1 javascript php regex

我使用相同的验证功能来验证系统上的所有数据.它可以发送任何类型的数据.该函数既发送一个值进行验证,又发送一个查询来搜索数据库,以便为其验证值所需的正则表达式.

是否可以使用从数据库中提取的正则表达式验证值的类型?目前我正在使用从数据库中提取的相同正则表达式来验证前端和后端.

对于PHP,我preg_match用来测试值是否是布尔值.
对于JavaScript,我使用该test方法来验证值是否为布尔值.

我试过了:

$val = true;
preg_match("^(true|false)$", $val);
Run Code Online (Sandbox Code Playgroud)

但是,我无法在PHP和JavaScript中使用相同的正则表达式:

"^(true|false)$" = works in JS, fails in PHP
"^(0|1)$" = works in PHP, fails in JS
Run Code Online (Sandbox Code Playgroud)

为什么我用正则表达式做这个?因为这是系统目前的构建方式,我想保持这种方式.Boolean是许多可以传递给验证函数的一种情况.重新做大量工作不是一种选择.


同样,我重新使用相同的正则表达式来验证前端和后端.正则表达式从数据库中提取,并以字符串形式存储.系统已成功验证字符串,但我在前端验证与后端相同的布尔值时遇到问题.如果不重做大量的工作,我可以在我的正则表达式中实现什么样的简单更改,以便它可以验证字符串和布尔值?

Ult*_*ter 6

如果必须在JavaScript和PHP中使用相同的正则表达式,因为您要将正则表达式存储在数据库中,那么在PHP和JavaScript的行为之间要真正获得稳定性的唯一要做的就是更改您的PHP验证功能和JavaScript验证功能相互匹配。

一种解决方案是修改您的正则表达式以测试所有四个,使其在PHP和JavaScript中起作用:
'^(true|false|1|0)$'

我相信,'^(true|false)$'尽管您使用了正则表达式,但它比清晰得多'^(0|1)$'。因此,编辑PHP行为以检测布尔值以使用字符串“ true”而不是布尔值true,等等。

从而:

$val = true;
preg_match("^(true|false)$", is_bool($val)?($val?'true':'false'):$val);
Run Code Online (Sandbox Code Playgroud)


zer*_*kms 5

这不是一个关于架构的争论的帖子,而是为这个问题找到解决方案.所有其他模式都很好.

好吧,让我们玩迂腐吧:

确切地说,您提供的代码

$val = true;
preg_match("^(true|false)$", $val);
Run Code Online (Sandbox Code Playgroud)

检查是否$val是布尔值的最可靠方法是使用is_bool.