該字符串應以「S2」開頭,後跟任意4位數字。2個字母后跟4個字符的正則表達式
匹配的字符串是「S20165」。
我試着用下面的代碼,但即使有5或6位數字,它總是回聲OK。
$string='S20104';
if(preg_match('/S2[0-9]{4}/', $string)){
echo 'OK';
}
else{
echo 'NOT OK';
}
該字符串應以「S2」開頭,後跟任意4位數字。2個字母后跟4個字符的正則表達式
匹配的字符串是「S20165」。
我試着用下面的代碼,但即使有5或6位數字,它總是回聲OK。
$string='S20104';
if(preg_match('/S2[0-9]{4}/', $string)){
echo 'OK';
}
else{
echo 'NOT OK';
}
你必須使用錨:
/^S2[0-9]{4}$/
^
字符串的開頭匹配和$
字符串的結尾匹配,所以這將確保您檢查完整的字符串,而不是隻是一個字符串。您可以使用\d
而不是[0-9]
。在PHP中,只要你不使用'u'pattern modifier,preg *函數不能識別Unicode,所以兩者是等價的。
的問題是一個匹配說的preg_match搜索字符串中的任何位置。
S2123456
^^^^^^
matches
可以錨使用^
(行首)和$
(行尾)正則表達式:
'/^S2[0-9]{4}$/'
錨需要是左邊的一個字符:) – Ryan 2012-02-15 15:25:08
哎呀!修正了謝謝。 – 2012-02-15 15:25:57
您需要將字符串的開始和結束匹配太
/^S2[0-9]{4}$/
$string='S20104';
if(preg_match('/^S2[0-9]{4}$/', $string)){
echo 'OK';
}
else{
echo 'NOT OK';
}
你錯過了開始^和結束[$
'/^S2[0-9]{4}$/'
可能重複我如何檢查是否字符串完全匹配正則表達式模式?](http://stackoverflow.com/questions/5596346/how-can-i-check-if-a-string-exactly-matches-a-regex-pattern) – mario 2012-02-15 15:46:11