[英]preg_match: All characters must match
我有一个用户输入,可以检查字符是否在白名单中。
我的正则表达式:
[A-Za-z0-9_~\-!@#\s\$%\^&\*\(\)\=\:\;\+\°\´\[\]\{\}\§\"\'\ß\ä\ö\ü\%\.\,\>\<\|\€]+$
我的代码部分:
$check = preg_match($pattern, trim($input));
现在,当$input
变量的值例如为abc²³
,输入将被阻塞。 但是,当其值为abc²³def
,内容将不会被阻止。
如何检查字符串的每个字符?
您只是忘了字符串锚的开始: ^
^[\p{L}\d_~\-!@#\s$%^&*()=:;+°´\[\]{}§"'%.,><|€]+$
我还简化了正则表达式。 请注意,我用\\p{L}
替换了A-Za-Zßäöü
,它将接受任何语言的字母。
您必须在一开始就锚定正则表达式:
^[A-Za-z0-9_~\-!@#\s\$%\^&\*\(\)\=\:\;\+\°\´\[\]\{\}\§\"\'\ß\ä\ö\ü\%\.\,\>\<\|\€]+$
您还可以简化一下:
^[\w~\-!@#\s$%\^&*()=:;+°´\[\]{}§"'ßäöü%.,><|€]+$
或者,甚至使用unicode属性:
^[-\p{L}\p{N}_~!@#\s$%\^&*()=:;+°´\[\]{}§"'%.,><|€]+$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.