[英]PHP Regular Expression pattern accepts characters that are not allowed
preg_match('~^[a-zA-Z0-9!@#$%^*()-_+=.]+$~', $string)
这是我在代码中使用的模式,我要告诉用户只允许使用这些字符。 但是问题在于它只适用于某些字符,不适用于某些其他字符。 例如,即使我没有在模式中输入“ <”和“>”,它也不允许使用“ john&john”之类的字符串,但允许“ test <>”!
模式中的大多数字符对于正则表达式引擎具有特殊含义,必须使用反斜杠转义:
^[a-zA-Z0-9\!\@\#\$\%\^\*\(\)\-\_\+\=\.]+$
这将工作:
preg_match('~^[a-zA-Z0-9!@#$%^*()_+=.-]+$~', $string)
问题是在字符类中间充当范围的转义连字符的存在。 使用此正则表达式:
preg_match('~^[\w!@#$%^*()+=.-]+$~', $string)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.