简单的php preg_match不适合我

时间:2015-09-30 23:58:42

标签: php preg-match

我已经谷歌搜索并看了很多关于这个主题的线索,但没有人为我解答这个问题。我甚至复制了几个不同的过滤器字符串,它们做同样的事情来做我的简单验证。它们都在www.functions-online.com/preg_match.htm上工作,但它们都没有在我的if()语句中工作。

PHP ver。 5.3.3 我的代码只允许使用Alpha-Numaric和空格:

  $myString = 'My Terrific Game';
  if (!preg_match('/^[a-z0-9\s]+$/i', $myString)) { "$errorMessage }

我甚至将过滤器缩小为' / ^ [a-z] + $ /'以及测试字符串到mytarrificgame'它仍然返回零。就像preg_match()根本不起作用一样。

有人有任何建议吗?

2 个答案:

答案 0 :(得分:1)

您需要纠正的一些事项:

  • "$errorMessage中有未公开的引号。它应该是$errorMessage"$errorMessage"
  • 那里没有命令。如果要打印该值,请使用echo $errorMessage
  • 是否在代码中的任何位置设置了变量?

这应该有效

if (!preg_match('/^[a-z0-9\s]+$/i', $myString)) { echo $errorMessage; }

或者,如果您考虑一下,只允许在允许的范围之外匹配1个字符就足够了。

<强>代码:

$myString = 'My Terrific Game';
$errorMessage = 'ERROR: Unallowed character';

if (preg_match('/[^a-z0-9\s]/i', $myString)) { 
    echo $errorMessage;
} else {
    echo 'Valid input';
}

ideone Demo

答案 1 :(得分:0)

我尝试了上面第一个答案的第二个例子中显示的过滤器字符串,它甚至没有在在线测试页面上工作,但它确实给了我一个新的起点来解决我的困境。当我把胡萝卜移到开口支架之前时,它有点工作但很脆弱。在尝试了不同的事情后,我终于回到原来的&#39; / ^ [a-z0-9 \ s] + $ \ i&#39;它开始坚如磐石。我认为它之前对我来说根本不起作用的原因是我期望对preg-match()表达式进行布尔测试以接受零为false。这可能是一个php版本5.3.3的东西。我尝试了以下内容;

  if(preg-match('/^[a-z0-9\s]+$/i', $testString) === 0) { "Do Something" }

现在正在运作。通过深入研究preg-match()描述,我发现如果发生错误,它只会返回一个布尔值false。有效的不匹配返回零。

感谢所有看过这里并考虑过我问题的人。