preg_replace不替换下划线

时间:2013-06-11 23:57:14

标签: php regex preg-replace

我想只允许字母数字字符和空格,所以我使用以下内容;

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

然而,这是允许下划线“_”我不想要的。为什么这样,我该如何解决?

由于

2 个答案:

答案 0 :(得分:1)

character class范围适用于两个代码点之间的一系列字符。字符_包含在A-z范围内,您可以通过查看ASCII表来查看:

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

因此,正如documentation中所述,不仅仅是下划线,而是您在上面看到的那些其他角色:

  

范围以ASCII整理顺序运行。 ...例如,[W-c]相当于[][\^_`wxyzabc]

要防止这种情况发生,您可以对字符类中的单个字符范围执行不区分大小写的匹配:

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

答案 1 :(得分:0)

你的表达中有错误。最后Z必须是资本。

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