我有一个用户输入,如果字符在白名单上,则会检查。
我的正则表达式:
[A-Za-z0-9_~\-!@#\s\$%\^&\*\(\)\=\:\;\+\°\´\[\]\{\}\§\"\'\ß\ä\ö\ü\%\.\,\>\<\|\€]+$
我的代码部分:
$check = preg_match($pattern, trim($input));
现在,当$input
变量的值为abc²³
时,输入会被阻止。但是当它具有值abc²³def
时,内容不会被阻止。
如何查看字符串的每个字符?
答案 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$%\^&*()=:;+°´\[\]{}§"'%.,><|€]+$