【问题标题】:perl regex of exactly 10 charactersperl 正则表达式正好 10 个字符
【发布时间】:2011-09-23 17:20:55
【问题描述】:

我在 PHP 中使用带有 preg_match 函数的 perl 风格的正则表达式。我想验证一个正好是 10 个字符的密钥,带有大写字母字符或数字。

我有

preg_match( '/[^A-Z0-9]/', $key);

在有效字符旁边找到无效字符。在我有限的知识范围内,我尝试过

preg_match( '/[^A-Z0-9]{10}$/', $key);

结果匹配 all 我的测试字符串,甚至是无效的字符串。

如何指定这个正则表达式?

【问题讨论】:

    标签: php regex pcre


    【解决方案1】:

    您放错了锚定字符串开头的^ 字符。 /[^A-Z0-9]{10}$/ 将匹配所有以 10 个非大写字母和数字字符结尾的文件。

    正确的 RE 应该是:

    preg_match( '/^[A-Z0-9]{10}$/', $key);
    

    正则表达式的解释:

    • ^ - 从字符串的开头匹配
      • [ - 字符类的开头,字符应与这些匹配。如果在此[ 之后直接找到^,它将否定匹配
        • A-Z - 大写字母
        • 0-9 - 数字
      • ] - 字符类结束
      • {10} - 匹配前一个字符类 10 次
    • $ - 匹配字符串直到结束

    【讨论】:

    • 啊!我看到我做了什么。当我开始编写它时,我打算检查任何 invalid 字符(并返回 false)。然后我想确保它是 10 个字符长。有没有办法编写正则表达式来检查 invalid 字符 并且 确保字符串长度为 10 个字符?
    • /^[^a-z]{10}$/ 将匹配不包含任何小写字符的 10 位数字字符串。
    • @Jacob 是的,但我也需要它来丢弃任何非字母数字。
    • @user151841:如果要返回包含无效字符或长度不为 10 的字符串,请使用 ! 否定返回值。 IE。 if (!preg_match('/^[A-Z0-9]{10}$/')) return false;
    • 这应该适用于任何不是小写字母和非单词字符[a-zA-Z0-9_]而不是_/^[^a-z\W_]{10}$/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多