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