2011-01-25 85 views

回答

17
if(preg_match('/[^A-Za-z0-9_ -]/', $str)) return FALSE; 

注意,我把空間連字符之前。如果空格在連字符後面,我將指定從下劃線到空格的字符範圍。 (問題也放一個反斜槓連字符之前逃吧躲避)

這是假設你是「允許」的意思是:這個表達式是被用來驗證字符串,如果比賽 ,那麼字符串是不允許(因此return FALSE)。因此,否定字符類([^...])中的字符實際上是允許的個字符。 (這是導致一些普遍的混亂中這個問題。)

1

如果需要,只允許你需要空間「/ /」

如果你需要允許任何空白字符(空格,製表符,換行符) - 使用 '/ \ s /'

如果你需要一個空間添加到您的模式(指忽略空格) - 使用/ [^ A-ZA-Z0-9 _ \ - ]/

2

不這是你的問題的答案,但我覺得有用的網站checking regex expressions。它還解釋了當您將鼠標懸停在輸入字段上時,表達式的每個部分所做的/意義。

15

在常規expretion這樣'/[^A-Za-z0-9_-\s]/'
\s意味着空間

2

你的問題還不清楚。如果$str具有任何不是A-Za-z0-9_-的字符,則正則表達式將成功。由於空格不是這些字符之一,所以正則表達式將匹配,並且整個語句返回FALSE

如果這不是你想要的,你想匹配正則表達式,如果$str有不A-Za-z0-9_-或空格的任何字符,則需要將其更改爲A-Za-z0-9_ -(注意下劃線之間的空間和連字符)。因此,當你的字符串有一個不是A-Za-z0-9_ -的字符時,正則表達式將匹配,並且你的語句將返回FALSE。如果您的字符串完全由A-Za-z0-9_ -組成,那麼正則表達式將無法匹配,並且您的處理將繼續到下一行。

編輯:下面是一個例子:如果你的字符串是abc123def,目前正則表達式不匹配,你將不會返回FALSE。如果字符串爲abc123 def,則正則表達式將匹配,並且語句將返回FALSE。如果將字符類更改爲A-Za-z0-9_ -,則正則表達式將無法匹配abc123defabc123 def,並且您將不會返回FALSE

相關問題