PHP'nin filter_var () Fonksiyonu Yaratma Uyarı

2 Cevap

Aşağıdaki filter_var () fonksiyonu uyarı oluşturuyor neden herhangi bir vücut biliyor mu? Bir karakter sınıfının olabilir kaç karakter üzerinde bir sınırı var mı?

$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";
}

Uyarı: filter_var () [function.filter-var]: Bilinmeyen değiştirici ':'

2 Cevap

Sizin regex bu dizge olarak PHP tarafından yorumlanır:

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

(use var_dump on $regex, and you'll get that)

Sağ da düzenli ifade ortasında, yani, bir çizgi yoktur; Eğer regex (it's the first character of $regex) sınırlandırmak için bir çizgi kullandığınız gibi, PHP ortasında bu çizgi regex sonunu işaret olduğunu düşünüyor.

Yani, PHP sizin regex aslında düşünüyor:

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

Bitiş eğik çizgiden sonra gelen her karakter modifiers olarak yorumlanır.

Ve ':' geçerli bir değiştirici değildir.

You might want to escape the slash in the middle of the regex ;-)
As well as some other characters, btw...

Bunun için bir çözüm preg_quote işlevini kullanmak olabilir.

Burada geçerli çalışma regex olduğunu:

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