php preg_match()很奇怪

时间:2015-08-19 16:25:36

标签: php boolean

当我在php上进行正则表达式验证时,我发现了这一点。

我已使用preg_match函数验证字符串。

我刚刚打印了preg_match返回的值,以确保工作流程。

在此期间,我发现了一件事。但无法理解他们的概念。

如果找到匹配,则preg_match()返回1。否则它将返回0.但有时我的打印功能没有打印任何东西。

在我通过php手册了解其所有返回值后......

他们发布了以下内容......

  

如果模式与给定主题匹配,则preg_match()返回1,否则返回0;如果发生错误,则返回FALSE。

然后我用var_dump知道打印的是什么......

这让我知道布尔是假的。

但我很想知道为什么它会返回布尔值假,当我只是把" ! " (不)在preg_match()之前?

以下是我的代码,

echo preg_match("/script/","script") // ===> this returs 1

echo !preg_match("/script/","script") // ===> this returns boolean false

我认为它必须返回整数0(零)...可以帮助我了解它的功能吗?或者我在语法上做错了什么???

有一件事,我在Opencart 2.0.0.0管理控制器模块中试过这个。

2 个答案:

答案 0 :(得分:1)

bool运算符将始终返回布尔值。

  

一个人!运算符结果的类型是bool。操作数的值转换为bool类型,如果为TRUE,则运算符结果为FALSE,否则结果为TRUE。

Langspec参考:https://github.com/php/php-langspec/blob/PHP-5.6/spec/10-expressions.md#unary-arithmetic-operators

POSIXt的正常转化规则应用于该值。

答案 1 :(得分:0)

当您在函数前放置isBlueCandle()时,您不会回显preg_match的返回值。你正在使用php的运算符来确定它是否松散地评估为真还是假。

!!preg_match("/script/","script")相同。请注意preg_match("/script/","script") == false而不是==。 0,null,空字符串和布尔值false将松散地评估为false。