【问题标题】:Regex for 2 letters followed by 4 digits2 个字母后跟 4 个数字的正则表达式
【发布时间】: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';
}

【问题讨论】:

标签: php regex


【解决方案1】:

你必须使用锚:

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

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

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

【讨论】:

    【解决方案2】:

    问题是 preg_match 在字符串内任何地方搜索匹配。

    S2123456
    ^^^^^^
    matches
    

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

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

    【讨论】:

    • 锚点必须是左边的一个字符:)
    【解决方案3】:
    $string='S20104';
    if(preg_match('/^S2[0-9]{4}$/', $string)){
        echo 'OK';
    }
    else{
        echo 'NOT OK';
    }
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        你错过了开始^和结束$

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多