All*_*lly 5 php regex preg-replace
我想只允许字母数字字符和空格,所以我使用以下内容;
$name = preg_replace('/[^a-zA-z0-9 ]/', '', $str);
Run Code Online (Sandbox Code Playgroud)
但是,这允许我不想要的下划线"_".为什么这样,我该如何解决?
谢谢
小智 1
字符类范围是两个代码点之间的字符范围。该字符_包含在 range 中A-z,您可以通过查看 ASCII 表看到这一点:
... YZ [ \ ] ^ _ ` ab ...
因此,不仅允许通过下划线,还允许您在上面看到的其他字符,如文档中所述:
范围按 ASCII 整理顺序运行。...例如,
[W-c]相当于[][\^_``wxyzabc]`。
为了防止这种情况发生,您可以对字符类中的单个字符范围执行不区分大小写的匹配:
$name = preg_replace('/[^a-z0-9 ]/i', '', $str);
Run Code Online (Sandbox Code Playgroud)