PHP的filter_var()函数生成警告

时间:2009-09-09 18:49:18

标签: php

有没有人知道为什么下面的filter_var()函数会产生警告?字符类中的字符数有限制吗?

$regex = "/^[\w\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\072\073\074\075\076\077\100\133\134\135\136\140\173\174\175\176]*$/";

$string = "abc";

if(!filter_var($string, FILTER_VALIDATE_REGEXP, array("options" => array("regexp"=>$regex))))
{
    echo "dirty";
}

else
{
    echo "clean";
}

警告:filter_var()[function.filter-var]:未知修饰符':'

2 个答案:

答案 0 :(得分:3)

你的正则表达式被PHP解释为这个字符串:

string '/^[\w!"#$%&'()*+,-./:;<=>?@[\]^`{|}~]*$/' (length=40)

(在$ regex上使用var_dump,你就可以了)

正好在你的正则表达式中间,所以,有一个斜线;当你使用斜杠来分隔正则表达式(它是$regex的第一个字符时,PHP认为中间的斜杠标记了正则表达式的结束。

所以,PHP认为你的正则表达式实际上是:

/^[\w!"#$%&'()*+,-./

结束斜杠后面的每个字符都被解释为modifiers

并且':'不是有效的修饰符。

你可能想要在正则表达式中间逃避斜线;-)
除了其他一些角色,顺便说一句......

解决方法可能是使用preg_quote函数。

答案 1 :(得分:0)

这是当前正在运行的正则表达式:

/^[\w\041\042\043\044\045\046\047\050\051\052\053\054\134\055\056\134\057\072\073\074\075\076\077\100\133\134\134\134\135\134\136\140\173\174\175\176]*$/i