2012-04-25 22 views
5

Regex'e hala çok yeniyim ve yapmam gereken şey sayıları ve harfleri kabul eden bir kural oluşturmak, ancak birbirini izleyen karakterlerin girilmesine izin verilmemesidir.Regex Sıralı Karakterleri Reddet

Örneğin: abcd -> Tamam, abbcd -> kötü

işe bunun çoğu var

ama çözemiyorum bölüm I ardışık karakterleri yasaklamak nasıl tam olarak? Bugüne kadar

Benim Kodu:

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

'[A-Za-z_0-9]' – shift66

cevap

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

\2 kısım grubunun (\w) ile eşleşen bir arka referans ve son hangisi karakter maçlar olduğunu. Yani, (?!\2) nolu negatif görünüm, "karakterin kendisi tarafından takip edilmez" anlamına gelir. Burada kullandığım bazı terimler size yabancı değilse, onları MDN's Regular Expression Documentation'a bakmalısınız. Değiştirmek OP olarak

8-15 karakter kabul dizeleri uzunluğunu sınırlamak için + {8,15} için: Ben eğer öyleyse z ile 0 arasındadır eksi işareti altı çizili ve olduğunu düşünüyorum İlk başta

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

yerine '[\ w]' yi kullanmanız daha iyi olur. Bu cevabı olan şey, limit kuralımı kaldırmasıdır ki bu, kullanıcının en az 8 karakter girmesi gerektiği anlamına gelir. 16'dan daha fazla – shade917

+0

@ shade917: Bunu başarmak için '+' işaretini '{8,15}' (sizden) olarak değiştirebilirsiniz. –

+0

Hey çok teşekkürler beyler, bu benim için mükemmel çalışıyor! – shade917

İlgili konular