簡體   English   中英

PHP的filter_var()函數生成警告

[英]PHP's filter_var() Function Generating Warning

有誰知道為什么下面的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]:未知修飾符':'

PHP將您的正則表達式解釋為以下字符串:

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

(在$ regex上使用var_dump ,您會得到的)

就在正則表達式中間,正斜線; 當您使用斜杠來分隔正則表達式時(這是$regex的第一個字符) ,PHP認為中間的斜杠標志着正則表達式的結束。

因此,PHP認為您的正則表達式實際上是:

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

斜杠后的每個字符都被解釋為修飾符

而且“:”不是有效的修飾符。

您可能想在正則表達式中間轉義斜線;-)
以及其他一些字符,順便說一句...

一個解決方案可能是使用preg_quote函數。

這是當前的正則表達式:

/^[\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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM