2010-05-17 86 views
1

我正在與我的正則表達式摔跤。 我想只允許字母和數字,並在用戶名點,2〜20個字符長 我想到了這樣的事情c#正則表達式問題:只允許字母,數字和點(2到20個字符)允許

[0-9A-ZA-Z] {2,20}

但隨後21個字符也行,這不是我想要什麼

+2

我認爲你需要更明確一點。我懷疑你想要一個由所有點組成的用戶名。我認爲它會更像'username'或'user.name',但'user.','.user'和'......'不是。 – tvanfosson 2010-05-17 14:54:43

+1

我注意到有幾千封信件被排除在外。那是故意的嗎? – 2010-05-17 15:15:31

+0

@tvanfosson好吧,它是管理功能,所以也會有一些用戶的想法,但你是對的,我的算法不會限制這個 – Michel 2010-05-17 19:07:27

回答

9

我建議你做兩個檢查 - 一個長度和一個基於內容的事實上,你可能只需要名稱中的一個點,而不是任何數量的點。我會假設像usernameuser.name這樣的名稱是唯一允許的格式。

這應該得到的內容(但允許下劃線以及):

^\w+(\.\w+)?$ 

如果你不想下劃線,那麼你就代替\w+使用[0-9a-zA-Z]+。爲了解釋,它將匹配任何由一個或多個單詞字符組成的字符串,後跟正好是0或1的點後跟一個或多個單詞字符。它還必須匹配字符串的開頭和結尾,即字符串中不允許其他字符。

然後你只需要通過一個簡單的長度檢查來獲得長度。

+0

非常好!是的,這個點有點困難。 .........可能是壞的,但jpvan.der.bilt可能是正確的 – Michel 2010-05-17 19:09:19

+1

@Michel - 那麼你可以將'(\。\ w +)?'改成'(\。\ w +)* '接受零個或多個而不是零個或一個。 – tvanfosson 2010-05-17 19:31:13

+0

工作!謝謝。 – Michel 2010-05-18 09:56:06

6
^[0-9a-zA-Z\.]{2,20}$ 
+2

我懷疑'........... .........'不允許。 – tvanfosson 2010-05-17 14:49:41

+0

啊,開始和結束,謝謝 – Michel 2010-05-17 19:09:51

6

嘗試^[\w\.]{2,20}$來代替。

2

您需要使用的開始和結束字符串(^$),並且逃脫.

^[0-9a-zA-Z\.]{2,20}$ 
相關問題