该字符串应以“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