Estoy tratando de crear expresiones regulares para la siguiente condición:
Caracteres permitidos: letras (az) (no distingue entre mayúsculas y minúsculas), longitud mínima: 1, longitud máxima: 255.
Los números y los caracteres especiales (excepto @,$,%,^) solo se permiten en combinación con palabras (textos az).
No se permiten caracteres especiales consecutivos.
Pueden aparecer números (hasta 4 juntos) y/o 1 carácter especial en combinación con palabras.
Ex:
9900 acres
¡Sabueso gris!
[Roy]Medios de comunicación
Genial, chico
están todos permitidos.
Parece que no puedo entenderlo.
Intenté crear esta expresión regular -
^(?:((([0-9]{0,4})[ ]{0,})([!#&*()<,>.?/{}\[\]_-]{0,1})([0-9]{0,4})[a-zA-Z]{1,255}(([0-9]{0,4})([ ]{0,})([0-9]{0,4}))([!#&*()<,>.?/{}\[\]_-]{0,1}))+){3,}$
pero sin exito
Desafío aceptado:
en lugar de una mega-regex, divídela:
function isValid(text = '') { if (!text.length || text.length > 255) { return false; } // check if there are more than 4 consecutive numbers if (/[0-9]{5,}/.test(text)) { return false; } // check if there are 2 consecutive special characters if (/[!#&*()<,>.?/{}[\]_-]{2,}/.test(text)) { return false; } return true; // should be fine ? } console.log(isValid('9900Acres')); // true console.log(isValid('Grey Hound!')); // true console.log(isValid('[Roy]Media')); // true console.log(isValid('Cool,boy')); // true
Prueba con esto:
^(?=.*[A-Za-z])(?!.*[^a-zA-Z\d\n]{2})(?!(?:.*[^\da-zA-Z\n])?\d+(?:[^\da-zA-Z\n].*)?$)[ !#&*()<,>.?\/{}\[\]\w-]{1,255}$
Explicado:
^ # Start of line / String # Lookahead: whatever + some letter (?=.*[A-Za-z]) # negative lookahead: whatever + 2 consecutive forbidden characters (?!.*[^a-zA-Z\d\n]{2}) # negative lookahead to forbid numbers without letters on some of the sides: (?! (?:.*[^\da-zA-Z\n])? # Optional: something + special character \d+ # numbers (?:[^\da-zA-Z\n].*)?$ # Optional: special character + something + end of string ) # All allowed characters 1 to 255 times [ !#&*()<,>.?\/{}\[\]\w-]{1,255} $ # End of line / string
Tienes una demostración aquí