2012-04-25 50 views
5

Todavía soy muy nuevo en Regex y, básicamente, lo que tengo que hacer es crear una regla que acepte números y letras, pero no se permiten ingresar caracteres consecutivos.Regex Rechazar Caracteres consecutivos

Por ejemplo: abcd -> ok, ABBCD -> mala

Tengo la mayor parte de ella a trabajar, pero la parte que me puedo imaginar es exactamente cómo me prohíbo caracteres consecutivos?

mi código hasta ahora:

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

Al principio pienso signo menos entre Z y 0 se subrayan y si es tan es mejor que uses '[\ w]' en lugar de '[A-Za-z_0-9]' – shift66

Respuesta

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

La parte \2 es una referencia hacia atrás y partidos lo último personaje fue emparejado por el grupo (\w). Entonces, el lookahead negativo (?!\2) significa "no seguido por el personaje en sí". Si algunos términos que utilicé aquí no le son familiares, debe buscarlos en MDN's Regular Expression Documentation.

Para limitar la longitud de las cadenas aceptadas a 8-15 caracteres como en el OP, cambiar el + a {8,15}:

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

con esta respuesta es que eliminó mi regla de límite, que es que el usuario debe ingresar un mínimo de 8 caracteres, pero no más de 16. – shade917

+0

@ shade917: puede cambiar el signo '+' a '{8,15}' (de su pregunta) para lograr eso. –

+0

¡Muchas gracias muchachos, esto funciona perfectamente para mí! – shade917

Cuestiones relacionadas