Regex表示2个字母后面跟着4位数字


Regex for 2 letters followed by 4 digits

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

匹配字符串为"S20165"。

我正在尝试使用以下代码,但即使有5或6个数字,它的回声也总是可以的。

$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"模式修饰符,preg*函数就不支持Unicode,因此两者是等效的。

问题是preg_match在字符串内的任何处搜索匹配的

S2123456
^^^^^^
matches

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

'/^S2[0-9]{4}$/'
  • 在线查看:ideone
  • 阅读更多关于锚点的信息:regularexpresssions.info/anchors.html
$string='S20104';
if(preg_match('/^S2[0-9]{4}$/', $string)){
    echo 'OK';
}
else{
    echo 'NOT OK';
}

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

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

您错过了开始^和结束$

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