精确为10个字符的perl正则表达式


perl regex of exactly 10 characters

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

我有

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

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

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

它与我的所有测试字符串相匹配,甚至是无效的字符串。

如何指定此正则表达式?

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

正确的RE是:

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

正则表达式的解释:

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