我想只允许字母数字字符和空格,所以我使用以下内容;
$name = preg_replace('/[^a-zA-z0-9 ]/', '', $str);
然而,这是允许下划线“_”我不想要的。为什么这样,我该如何解决?
由于
答案 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);
^