繁体   English   中英

PHP正则表达式模式接受不允许的字符

[英]PHP Regular Expression pattern accepts characters that are not allowed

preg_match('~^[a-zA-Z0-9!@#$%^*()-_+=.]+$~', $string)

这是我在代码中使用的模式,我要告诉用户只允许使用这些字符。 但是问题在于它只适用于某些字符,不适用于某些其他字符。 例如,即使我没有在模式中输入“ <”和“>”,它也不允许使用“ john&john”之类的字符串,但允许“ test <>”!

模式中的大多数字符对于正则表达式引擎具有特殊含义,必须使用反斜杠转义:

^[a-zA-Z0-9\!\@\#\$\%\^\*\(\)\-\_\+\=\.]+$ 

https://regex101.com/r/kH7hD8/1

我总是使用https://regex101.com/之类的工具测试我的正则表达式

您必须在正则表达式中转义一些特殊字符:

^[a-zA-Z0-9!@#\$%\^\*\(\)\-_\+=\.]+$

这将工作:

preg_match('~^[a-zA-Z0-9!@#$%^*()_+=.-]+$~', $string)

问题是在字符类中间充当范围的转义连字符的存在。 使用此正则表达式:

preg_match('~^[\w!@#$%^*()+=.-]+$~', $string)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM