2011-07-15 75 views
5

我想驗證輸入字段與此模式的正則表達式[A-Za-z]{,10} 我希望它只發現一個匹配,如果在輸入字段中發送10個或更少的字符,我得到的問題是它會匹配所有少於10個字符的單詞。使用正則表達式按長度過濾字符串

有沒有辦法說,如果有超過10個字符在輸入字段回來爲false,還是隻是更好地用PHP做strlen

+0

請注意:'{,10}'是一個無效的量詞。雖然:「{10,}」表示「_」匹配10次或更多次「_,但表達式」{,10}「並不意味着_」匹配0到10次「_實際上意味着:_」匹配一個左花括號,一個逗號,數字1,數字0和一個右花括號「_。要得到你想要的行爲,你需要像這樣指定第一個數字:'{0,10}'。 – ridgerunner

回答

1

在OP和所有當前正則表達式答案中存在一個重要的語法錯誤:在PHP中使用大括號量詞時(PCRE),您需要指定第一個數字。 (即表達式:{,10}不是一個有效的量詞!)儘管逗號和第二個數字是可選的,但是需要一個大括號量詞的第一個數字。因此,表達式應該像這樣指定:

if (preg_match('/^[A-Za-z]{0,10}$/', $text)) 
    // Valid input 
else 
    // Invalid input 
3

如果您需要驗證它只是字母,請不要使用strlen()。相反,把邊界(^$)對您正則表達式:

/^[A-Za-z]{,10}$/ 
0

如果你只是匹配^[A-Za-z]{,10}$它會檢查整個字符串是10或更少。

0

^[A-Za-z]{,10}$

[email protected]#$^&$a36#&$^將通過您的正則表達式,因爲a是它的串並a[A-Za-z]{,10}

0

如果你只在字符串的長度有關,正則表達式是嚴厲的,你應該使用strlen代替。

相關問題