繁体   English   中英

preg_match:所有字符必须匹配

[英]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.

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