我想只允许alpha数字字符和空格,所以我使用下面的;
$name = preg_replace('/[^a-zA-z0-9 ]/', '', $str);
然而,这允许下划线"_",这是我不想要的。为什么会这样,我该如何解决?
谢谢
字符类范围用于两个代码点之间的字符范围。字符_
包含在范围A-z
中,您可以通过查看ASCII表看到这一点:
所以不仅仅是下划线被允许通过,还有你在上面看到的其他字符,如文档中所述:
range以ASCII排序顺序. ...进行操作例如,
[W-c]
等于[]['^_
'wxyzabc]
。
为了防止这种情况的发生,你可以在你的字符类中执行一个不区分大小写的匹配:
$name = preg_replace('/[^a-z0-9 ]/i', '', $str);
你的表达有误。最后一个Z必须大写
$name = preg_replace('/[^a-zA-Z0-9 ]/', '', $str);
^