2012-04-25 129 views
5

對於正則表達式我還是很新的,基本上我需要做的是創建一個接受數字和字母但不允許輸入連續字符的規則。正則表達式拒絕連續字符

例如:ABCD - >確定,ABBCD - >壞

我有大部分工作,但我無法弄清楚的部分正是我怎麼禁止連續字符?

到目前爲止我的代碼:

/^[A-Za-z-0-9]{8,15}$/i 
+0

起初我覺得Z和0之間減號強調,如果它是如此你最好使用'[\ w]'而不是'[A-Za-z_0-9]' – shift66 2012-04-25 07:48:07

回答

4
>>> r = /^((\w)(?!\2))+$/i 
>>> r.exec('abbcd') 
null 
>>> r.exec('abcd') 
[ 'abcd', 
    'd', 
    'd', 
    index: 0, 
    input: 'abcd' ] 

\2部分是一個反向引用,並取字符最後比賽由集團(\w)匹配。所以負面的預測(?!\2)的意思是「沒有跟隨角色本身。」如果我在這裏使用的某些術語對您不熟悉,您應該在MDN's Regular Expression Documentation上查找它們。

要接受字符串的長度,限制在8-15個字符作爲OP,改變+{8,15}

>>> r = /^((\w)(?!\2)){8,15}$/i 
>>> r.exec('abcd') 
null 
>>> r.exec('abcdabcd') 
[ 'abcdabcd', 
    'd', 
    'd', 
    index: 0, 
    input: 'abcdabcd' ] 
+0

這個答案就是它刪除了我的限制規則,即用戶必須輸入最少8個字符但不多於 – shade917 2012-04-25 08:19:05

+0

@ shade917:你可以將'+號改爲'{8,15}'(來自你的問題)來實現這一點。 – 2012-04-25 08:41:28

+0

嘿,謝謝很多人,這對我來說非常合適! – shade917 2012-04-25 08:45:32