我需要使用PHP來驗證用戶名,我只希望他們使用的字母數字,以及破折號(-
),下劃線(_
)和時間(.
)PHP正則表達式驗證
這是正確的?
preg_match("/[A-Za-z0-9_-.]/",$text);
我需要使用PHP來驗證用戶名,我只希望他們使用的字母數字,以及破折號(-
),下劃線(_
)和時間(.
)PHP正則表達式驗證
這是正確的?
preg_match("/[A-Za-z0-9_-.]/",$text);
不,它不是(雖然,我想你已經懷疑過,否則你不會問)。 :)
定義字符組時,短劃線用於定義範圍,就像您做的那樣A-Z
表示A和Z之間的所有字符。但是,您也可以使用_-.
,表示_和之間的所有字符。 (我不知道這是什麼,但你可以在ASCII表中查找它)。爲了允許匹配字符組中的破折號,它被放置在任何不能被解釋爲字符範圍的地方,通常是第一個或最後一個字符(但請參閱其他創意方式的註釋;))。
preg_match("/^[A-Za-z0-9_.-]+$/",$text);
正如評論指出的那樣,你需要錨太,以確保有匹配的範圍之外沒有charachters(這是什麼^,它匹配開頭的字符串,和$,這匹配字符串的結尾,是)。您還需要確保您可以匹配多個字符。所以在那裏添加一個+(或者如果你想允許空字符串),意思是一個或多個字符。
HTH
@roe - 如果你逃脫它也會工作 - '\ -'? – 2009-10-30 09:39:29
破折號也可以轉義:'/ [A-Za-z0-9 _ \ - 。] /',或者放置在開始:'/ [ - A-Za-z0-9 _。] /'之間或者範圍:'/ [AZa-z0-9 _。] /'以匹配文字'-'。 – 2009-10-30 09:40:06
@Bart:好點.. – falstro 2009-10-30 09:42:11
您需要在開始的結束錨定模式,現在它會$文本,只要有一隻有效的字符,其餘爲無效匹配。使用這個:
if (preg_match('/^[\w.-]+$/', $text)) { /* valid */ }
\ w是與[0-9A-Za-z_]相同的東西。另一種方法是去反轉模式並搜索任何無效字符,並檢查沒有匹配:
if (!preg_match('/[^\w.-]/', $text)) { /* valid */ }
嗨布倫丹 - 找出是否正確的最簡單方法就是實際測試它。 – 2009-10-30 09:33:49