preg_match:所有字符必须匹配

时间:2015-04-26 10:01:08

标签: php regex

我有一个用户输入,如果字符在白名单上,则会检查。

我的正则表达式:

[A-Za-z0-9_~\-!@#\s\$%\^&\*\(\)\=\:\;\+\°\´\[\]\{\}\§\"\'\ß\ä\ö\ü\%\.\,\>\<\|\€]+$

我的代码部分:

$check = preg_match($pattern, trim($input));

现在,当$input变量的值为abc²³时,输入会被阻止。但是当它具有值abc²³def时,内容不会被阻止。

如何查看字符串的每个字符?

2 个答案:

答案 0 :(得分:3)

您只是忘记了字符串锚点的开头:^

^[\p{L}\d_~\-!@#\s$%^&*()=:;+°´\[\]{}§"'%.,><|€]+$

我也简化了正则表达式。请注意,我将A-Za-Zßäöü替换为\p{L},它将接受任何语言的字母。

答案 1 :(得分:3)

你必须在开始时锚定正则表达式:

^[A-Za-z0-9_~\-!@#\s\$%\^&\*\(\)\=\:\;\+\°\´\[\]\{\}\§\"\'\ß\ä\ö\ü\%\.\,\>\<\|\€]+$

您也可以简化一下:

^[\w~\-!@#\s$%\^&*()=:;+°´\[\]{}§"'ßäöü%.,><|€]+$

或者,甚至使用unicode属性:

^[-\p{L}\p{N}_~!@#\s$%\^&*()=:;+°´\[\]{}§"'%.,><|€]+$