preg_replace无法替换下划线

5

我想只允许使用字母数字和空格,因此我使用以下代码:

$name = preg_replace('/[^a-zA-z0-9 ]/', '', $str);

然而,这允许下划线 "_",而我不想要它。为什么会出现这种情况,我该如何解决?

谢谢。

2个回答

1

字符类范围是指两个代码点之间的一系列字符。字符_包含在范围A-z中,您可以通过查看ASCII表来了解这一点:

... Y Z [ \ ] ^ _ ` a b ...

因此,不仅下划线被允许通过,还有您在上面看到的其他字符,如文档中所述:

范围按ASCII排序。例如,[W-c]等同于[][\^_`wxyzabc]

要防止发生这种情况,您可以在字符类中使用单个字符范围执行大小写不敏感匹配:

$name = preg_replace('/[^a-z0-9 ]/i', '', $str);

0

你的表达式有错误。最后一个Z必须是大写。

$name = preg_replace('/[^a-zA-Z0-9 ]/', '', $str);
                              ^

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接