我在PHP中使用带有preg_match
函数的perl风格的正则表达式。我想验证一个正好10个字符的密钥,大写字母字符或数字。
我有
preg_match( '/[^A-Z0-9]/', $key);
在有效字符旁边找到无效字符。在我有限的知识中,我试过
preg_match( '/[^A-Z0-9]{10}$/', $key);
最终匹配所有我的测试字符串,甚至是无效的测试字符串。
如何指定此正则表达式?
答案 0 :(得分:8)
你错放了固定字符串开头的^
字符。 /[^A-Z0-9]{10}$/
将匹配以10个字符结尾的所有文件,这些字符不是大写字母和数字。
正确的RE将是:
preg_match( '/^[A-Z0-9]{10}$/', $key);
正则表达式的解释:
^
- 从字符串开头匹配
[
- 字符类的开头,字符应与这些字符匹配。如果在^
之后直接找到[
,则会取消匹配
A-Z
- 大写字母0-9
- 数字]
- 字符类的结尾{10}
- 匹配前一个字符类10次$
- 匹配字符串直到结束