我想只允許字母數字字符和空格,所以我使用以下;preg_replace不會替換下劃線
$name = preg_replace('/[^a-zA-z0-9 ]/', '', $str);
但是,這是允許我不想要的下劃線「_」。爲什麼是這個,我該如何解決它?
由於
我想只允許字母數字字符和空格,所以我使用以下;preg_replace不會替換下劃線
$name = preg_replace('/[^a-zA-z0-9 ]/', '', $str);
但是,這是允許我不想要的下劃線「_」。爲什麼是這個,我該如何解決它?
由於
的character class範圍爲範圍內的兩個代碼點之間的字符。字符_
包括在範圍A-z
,你可以通過查看ASCII表中看出:
... Y Z [ \ ]^_ ` a b ...
所以它不僅是一個的被允許通過的底線,但那些其他字符以上你看到的,如前所述在documentation:
範圍在ASCII整理序列中操作。 ...例如,
[W-c]
相當於[][\^_
`wxyzabc]
。
爲了防止這種情況發生,你可以在你的字符類執行與單個字符範圍不區分大小寫的匹配:
$name = preg_replace('/[^a-z0-9 ]/i', '', $str);
你在你的表達有誤。最後的Z必須是大寫。
$name = preg_replace('/[^a-zA-Z0-9 ]/', '', $str);
^
啊哈很好的回答。謝謝! – Ally