elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  regex para email catastrophic backtracking
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: regex para email catastrophic backtracking  (Leído 3,108 veces)
gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
regex para email catastrophic backtracking
« en: 19 Abril 2016, 06:24 am »

Estoy creando mi propio regex para validar emails pero no consigo hacer funcionar el límite de carácteres de los dos primeros grupos, el tercer grupo si que valida bien el máximo.

Código
  1. /^([\w]+(?:[\.\-][\w]+)*){1,64}@([\w]+(?:[\.\-][\w]+)*){1,64}\.([a-zA-Z]{2,7})$/

Si no me equivoco el error quiere decir que está mal optimizado y le da carga innecesaria al procesador, no?

Como se puede leer, lo que busco es que los guiones actuen de la misma manera que los puntos, que no se puedan poner delante ni detras, solo entre dos caracteres \w. Tanto para el nombre de usuario como para el nombre de dominio.

Gracias!


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: regex para email catastrophic backtracking
« Respuesta #1 en: 19 Abril 2016, 09:37 am »

{1,64} no es un límite de caracteres. Es la cantidad de veces que se puede repetir lo que tiene detrás. Como detrás tienes:
Código:
([\w]+(?:[\.\-][\w]+)*)
Eso se va a repetir hasta 64 veces. Como tienes un *, no va a tener límite máximo.


En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: regex para email catastrophic backtracking
« Respuesta #2 en: 19 Abril 2016, 13:21 pm »

Aaah vale, ya decia yo que algo parecia extraño. Entonces un límite de carácteres válido sería ponerlo delante de una clase de caráctares, no en un grupo nesteado que no tiene límite.

Código
  1. /^([\w\s]{4,10})$/

Para casos de grupos nesteados ¿es mejor usar la función php strlen()? o ¿hay alguna manera eficiente de hacer esto dentro del regex?

De todas maneras parece que si uso strlen() le doy más flexibilidad al usuario con el limite de carácteres. 100 carácteres maximos para un email está bien, ¿no?
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: regex para email catastrophic backtracking
« Respuesta #3 en: 19 Abril 2016, 18:32 pm »

Ahí ya, tú verás. Sin embargo, lo ideal sería una validación completa por parte de regex.

Te serviría algo como:
Código
  1. /[0-9a-zA-Z](?:[0-9a-zA-Z\.\-]{0,62}[0-9a-zA-Z])?/

Claro que ahí permitiría varios puntos seguidos.
Un validador que mida la cadena exacta sin duda es algo difícil. Tu método, validando luego con otro lenguaje, pienso que es perfecto para no complicarse la vida xD
En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: regex para email catastrophic backtracking
« Respuesta #4 en: 20 Abril 2016, 17:32 pm »

Si, y se te olvidaron las _ xD (un email sin _?  ;D)

Parece que lo mejor es strlen(), 100 para todo, más flexibilidad.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Recursividad y Backtracking!!!!
Java
bwsr 2 8,290 Último mensaje 28 Junio 2007, 00:40 am
por bwsr
Backtracking - Laberinto
Programación C/C++
hadree 3 7,090 Último mensaje 23 Noviembre 2010, 03:08 am
por do-while
[SOURCE] RegexCon (herramienta para correr substituiciones regex)
.NET (C#, VB.NET, ASP)
Eleкtro 0 2,030 Último mensaje 26 Febrero 2016, 16:23 pm
por Eleкtro
regex para protegerse de varios ataques
PHP
gAb1 8 4,817 Último mensaje 20 Abril 2016, 17:13 pm
por gAb1
Regex para matchear todas las urls
Programación General
Kaxperday 0 1,802 Último mensaje 22 Mayo 2016, 17:03 pm
por Kaxperday
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines