【发布时间】:2012-02-15 15:22:07
【问题描述】:
字符串应以“S2”开头,后跟任意 4 位数字。
匹配的字符串是“S20165”。
我正在尝试使用以下代码,但即使有 5 位或 6 位数字,它也始终显示 OK。
$string='S20104';
if(preg_match('/S2[0-9]{4}/', $string)){
echo 'OK';
}
else{
echo 'NOT OK';
}
【问题讨论】:
字符串应以“S2”开头,后跟任意 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}$/'
【讨论】:
$string='S20104';
if(preg_match('/^S2[0-9]{4}$/', $string)){
echo 'OK';
}
else{
echo 'NOT OK';
}
【讨论】:
你也需要匹配字符串的开头和结尾
/^S2[0-9]{4}$/
【讨论】:
你错过了开始^和结束$
'/^S2[0-9]{4}$/'
【讨论】: