2011-07-21 42 views
1

我正在嘗試爲ASP.Net正則表達式驗證程序控件設置驗證表達式。它用於驗證用戶名的創建,所以我想限制字符的數量,並且我也想阻止它們使用空格。下面是我到目前爲止有:ASP.Net正則表達式驗證程序無空格

^.*(?=.{5,20})(?=.*\w{5,255}).*$ 

\w{5,255}部分防止空格和特殊字符(除下劃線,顯然)。我不知道「5,255」是如何工作的,但它確實如此;我只是從其他地方複製它。

我遇到的主要問題是,如果第一個或最後一個字符是空格(或特殊字符),它會通過驗證,這是不可接受的。誰能幫我?我相信這很簡單,但我對正則表達式幾乎一無所知。

回答

3

可以使用更簡單的東西是這樣的:

^[a-zA-Z0-9_]{5,255}$

這將允許長度5-255字符之間的字母數字的用戶名。

+0

下劃線怎麼樣?我也想允許下劃線,原來的那個,不知何故。 – tjc59

+0

查看我的更新。如果你需要任何其他角色,只需將它們添加到'[]'內。 – Mrchief

+0

或者只是使用'^ \ w {5,255} $',因爲'\ w'實際上是'[a-zA-Z0-9_]'的簡寫。 –

2

(讓我們擴大瞭如何至少使用正則表達式的整體理解!)

爲什麼張貼的正則表達式是行不通的,因爲你試圖使用前瞻的主要原因。 Lookahead是一個0長度的模式,它只保證字符串的下一部分將匹配特定的模式(通常用於利用長度爲0的優點,所以它不會擴展捕獲組)。

實際上,你的正則表達式(去關原/^.(?=.{5,20})(?=.\w{5,255}).*$/)的意思是:

^.「我們這行的開頭應匹配任何單個字符(只要它不是一個新行,雖然這依賴於正則表達式執行還有可能會或可能不會被傳入標誌)「

(?=‘並保證在這裏經過’

.{5,20})任何5-20個字符。」

(?= 「同樣,相同的第一個字符(因爲,記住,先行是0長度),保證後」

. 「一個任意字符」

\w{5,255}) 「和5-255字字符」。

.*$當然,由於所有詳盡的匹配都是0長度,所以我們希望該行的其餘部分是任意數量的字符。「

你在技術上可以做些什麼來使用lookaround是^(?=\w{5,255}).{5,255}$,但這太過複雜了。我建議只使用\w{5,255}或其他方面。