2012-04-25 16 views
5

Sono ancora molto nuovo su Regex e sostanzialmente quello che devo fare è creare una regola che accetti numeri e lettere ma non è possibile inserire caratteri consecutivi.Regex Rifiuta Personaggi consecutivi

Ad esempio: abcd -> ok, ABBCD -> Bad

Ho la maggior parte di esso per lavorare, ma la parte che riesco a capire è esattamente come faccio proibisco caratteri consecutivi?

My Code finora:

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

In un primo momento penso che il segno meno tra Z e 0 è sottolineare e se è così è meglio usare '[\ w]' invece di '[A-Za-z_0-9]' – shift66

risposta

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

La parte \2 è un riferimento indietro e le partite a seconda di quale personaggio è stato lo scorso corrispondente al gruppo (\w). Quindi il lookahead negativo (?!\2) significa "non seguito dal personaggio stesso". Se alcuni termini che ho usato qui non ti sono familiari, dovresti cercarli su MDN's Regular Expression Documentation.

per limitare la lunghezza delle stringhe accettato di 8-15 caratteri nel PO, cambiare il +-{8,15}:

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

la cosa con questa risposta è che ha rimosso la mia regola di limite che è che l'utente deve inserire un minimo di 8 caratteri ma non di più di 16. – shade917

+0

@ shade917: È possibile modificare il segno '+' a '{8,15}' (dalla propria domanda) per ottenere ciò. –

+0

Hey, grazie mille ragazzi, questo funziona perfettamente per me! – shade917