2017-03-18 35 views
0

我總是得到stuf與preg_match功能。不知道我的regelur表達

我希望輸入與a-z,A-Z,0-9,@#&-_.,匹配,沒有別的。 因此,如果!在輸入中,它需要返回false。

我到現在爲止。

$string = "String-20"; 
return (preg_match("/[a-z][A-Z][0-9][@#&-_.,]/i", $string)) ? true : false; 

這應該會返回true

但保留返回false

+0

那麼,你的正則表達式匹配4個字符:2個字母,然後是一個數字和一些字符,包括大寫字母。你似乎想要'/^[a-zA-Z0-9 @#&_。, - ] + $ /' –

回答

2

你會希望將這些作爲一個集合,而不是像那樣分解它們。你的模式將匹配一個字符串,如「aA0 @」

你說的「一個字符az,然後一個Az,然後一個0-9,然後是這些特殊字符之一」,但你實際需要的是「任何數字這些特定字符「

^和$ mean字符串的開始和結束,所以我認爲這應該做你想做的。

preg_match('/^[[email protected]#&\-_.,]*$/i', $string) 
+0

很好的消除。但是當我刪除A-Z並且在字符串中有一個大寫字母時,它仍然是真的 – LenapCapo

+0

是的,我的初始答案是完全錯誤的,請嘗試編輯<3 –

+1

也是? true:false是多餘的,返回preg_match('/^[a-z0-9 @#&-_。,] * $/i',$ string); –

2

你的正則表達式4個字符塊(S)任何地方匹配的字符串中(如preg_match可以找到部分匹配):2個字母,然後一個數字和一些字符,包括大寫字母,因爲&-_聲明如下範圍:

enter image description here

使用

/^[[email protected]#&_.,-]+$/i 

甚至(因爲\w這裏將匹配[a-zA-Z0-9_]):

/^[\[email protected]#&.,-]+$/ 

如果一個空字符串將被允許,*(零個或多個)取代+(出現一次或多次)。

這個^錨將確保引擎在字符串的開始處開始匹配並且$錨將確保該模式應該匹配到字符串結尾。字符類末尾的連字符將被解析爲文字-

+0

連字「whithin」字符類'[]'具有範圍的特殊含義,除非它被轉義了'\ -'或最後一個字符。 –

相關問題