2012-01-26 53 views
1

我有這樣的正則表達式:RegEx不能正常工作?

/[^a-z\s]/i 

這是假設匹配從A到Z的任何字符和A-Z和遇到的任何空白。它適用於角色,但不適用於空間,爲什麼?

我檢查在PHP這樣的:

if (preg_match('/[^a-z\s]/i', $username)) { 
    ... 
} 

我檢查,看看是否用戶名包含任何其他字符除字母(A-Z,A-Z)或大於空間。

+0

的''^反轉的含義模式。 「匹配任何不是a-z或空格的字符」。 –

+0

我知道,因爲如果條件返回true,我會給出一個錯誤,所以如果我刪除'^',我會做'if(!(preg_match('/ [^ az \ s]/i',$ username))) {...}'。所以這就是我需要的方式,問題似乎是它看不到空格,甚至不止一個。 – Roland

回答

3

你的正則表達式應該是這樣的: /^[a-z\s]+$/i

if (preg_match('/^[a-z\s]+$/i', $username)) { 
    //the username is ok. 
} 
1

對我的作品!也許你應該包括一個完全可重複的例子,但它爲我提供了空間。

您也可以重寫此正則表達式做相反的,這是比較明顯的一點,我個人的看法:

/^[a-z\s]*$/ 
2

/[^a-z\s]/i將只匹配字符在區分大小寫設置az和空間。嘗試刪除^,否定括號內的字符。模式匹配所有字母和空格應改爲:

/[a-z\s]/i

注意\s將不只是匹配的空間。它將匹配任意空格字符(如製表符和換行符)。最後

/^[a-z\s]/i

,如果你想匹配:

如果要強制火柴開始以字母或空間,你必須移動^外的支架,像這樣以一個或多個出現的字母和空格開頭的字符串,您需要添加+修飾符。因爲^字符是一個錨

/^[a-z\s]+/i

1

,並且已將它不正確......如果你使用^和$的開始和結束串的標記,他們需要:否則,它只會匹配單個字符分別出現在絕對的開始和結束處。

所以,它聽起來就像你想要:

^[a-zA-Z\s]$ 

,或者如果你想匹配的α的倍數和/或空格,則:

^[a-zA-Z\s]*$