2011-07-25 34 views
1

我試圖創建一個正則表達式模式,允許用戶使用以下規範創建一個用戶名。 (對於該初始圖案的目的,我只使用標準的美國英語字母表。Javascript正則表達式模式

第一個字符必須是字母字母(大寫或小寫)。[A-ZA-Z] 的最後一個字符必須是一個字母數字(大寫或小寫)[A-ZA-Z0-9] 之間必須是字母或數字與一個規則的任何字符:(。)

用戶可以使用一個週期,破折號( - ),或下劃線(_),但它必須跟一個字母數字字符。因此,一次不重複一個或多個這些字符。

我試過以下正則表達式模式,但沒有得到結果我wa的希望。感謝您花時間幫助我解決這個問題。

^[a-zA-Z]([a-zA-Z0-9]+[._-]?[a-zA-Z0-9]+)+$ 

編輯

它實際上可能是工作我預期的方式。但我總是得到兩場比賽回到我身邊。第一個是整個有效的字符串,第二個是第一個字符串的縮寫版本,通常會切斷第一個字符。的有效輸入

實例:

  • Spidy
  • Spidy.Man
  • AMA-ZA-zing_Spidy的無效輸入

實例:

  • Extreme_ _ _Spi DY(重複下劃線)
  • 的_-_ Spidy(重複特殊字符)
  • _ _ SPIDY _ _(開始和有特殊字符結尾)

回答

5

聽起來像這樣的模式:

^[a-zA-Z]([._-]?[a-zA-Z0-9])*$ 
+0

謝謝,這是我自己的更好的代表。任何想法爲什麼我的text.match(模式)返回多個匹配? – Spidy

+1

圓括號加倍捕獲組,所以你也看到了捕獲的值。你可以放棄所有這些,因爲你需要知道的只是字符串是否匹配。 –

1
^[a-zA-Z]([._-]?[a-zA-Z0-9]+)*$