2014-05-02 47 views
1

我使用這個正則表達式來測試,如果用戶名是有效的正則表達式匹配:我不能得到的preg_match來測試整個字符串

[A-Za-z0-9 _]{3,12}當我測試它的匹配與文本編輯器串test'ing,它強調了「測試」和「ING」,但是當我在PHP中使用下面的代碼:

if(!preg_match('/[A-Za-z0-9 _]{3,12}/', $content)其中$內容爲test'ing,它應該返回FALSE,它仍然返回true。

我的正則表達式有什麼問題嗎?我需要:

  • 最小長度3,最多12 {3,12}
  • 連續無空格前或後的字符串/下劃線,不能有空格/下劃線的任何地方 (我使用額外的檢查,這是因爲我不是正則表達式非常好)
  • 只有字母數字,空格和下劃線允許提前[A-Za-z0-9 _]

謝謝...

回答

2

你錯過了在正則表達式的錨,所以正則表達式可以舒適地在字符類任何地方字符串中匹配3個字符。這不是你想要的。你想檢查你的正則表達式是否匹配整個字符串。爲此,您需要包含錨點(^$)。

if(!preg_match('/^[A-Za-z0-9 _]{3,12}$/', $content) 
       ^    ^

^斷言的位置在字符串的開頭和$在字符串的結尾斷言位置。請注意,這些元字符實際上不會消耗字符。它們是零寬度斷言。

延伸閱讀:

+0

哎呀,simulposted;對不起: – Piskvor

+0

@Piskvor:哈,發生了,沒有任何顧慮(我通常會等待5分鐘的寬限期才能完成編輯:) –

+0

是的,我沒有注意到你可能仍然正在編輯:) – Piskvor

2

個您應該添加的開始和結束錨(^$):

if(!preg_match('/^[A-Za-z0-9 _]{3,12}$/', $content) 

^匹配字符串的開始和$結束匹配。這樣,它只會匹配如果整個字符串滿足您的正則表達式。

希望幫助

+0

獲取更多的85 !!!! –

+0

@AmitJoki,哈哈,今天不行,已經完蛋了,真的很累。明天也許:) – sshashank124