正则表达式为2个字母后跟4位数

时间:2012-02-15 15:22:07

标签: php regex

字符串应以“S2”开头,后跟任意4位数。

匹配的字符串是“S20165”。

我正在尝试使用以下代码,但即使有5位或6位数字,它也总是很好。

$string='S20104';
if(preg_match('/S2[0-9]{4}/', $string)){
    echo 'OK';
}
else{
    echo 'NOT OK';
}

5 个答案:

答案 0 :(得分:9)

你必须使用锚点:

/^S2[0-9]{4}$/

^匹配字符串的开头,$匹配字符串的结尾,因此这将确保您检查完整的字符串,而不仅仅是子字符串。

您也可以使用\d代替[0-9]。在PHP中,只要你不使用'u'pattern modifier,preg *函数就不能识别Unicode,所以两者是等价的。

答案 1 :(得分:4)

问题在于preg_match在字符串中的任何地方搜索匹配

S2123456
^^^^^^
matches

您可以使用^(行首)和$(行尾)锚定正则表达式:

'/^S2[0-9]{4}$/'

答案 2 :(得分:1)

$string='S20104';
if(preg_match('/^S2[0-9]{4}$/', $string)){
    echo 'OK';
}
else{
    echo 'NOT OK';
}

答案 3 :(得分:0)

您还需要匹配字符串的开头和结尾

/^S2[0-9]{4}$/

答案 4 :(得分:0)

你错过了开始^并结束$

'/^S2[0-9]{4}$/'