Regex para validar nombre de usuario
Estoy tratando de entender qué hay de malo con este patrón de expresiones regulares:
'/^[a-z0-9-_\.]*[a-z0-9]+[a-z0-9-_\.]*{4,20}$/i'
Lo que intento hacer es validar el nombre de usuario. Los caracteres permitidos son alfanuméricos, guiones, guiones bajos y puntos. La restricción que estoy tratando de implementar es tener al menos un carácter alfanumérico para que el usuario no pueda tener un apodo como este:_-_.
La función que estoy usando ahora es:
function validate($pattern, $string){
return (bool) preg_match($pattern, $string);
}
Gracias
EDITA
Como dijo @mario, sí, aquí hay un problema con*{4,20}
. Lo que intenté hacer ahora es agregar( )
pero esto no funciona, excepto:
'/^([a-z0-9-_\.]*[a-z0-9]+[a-z0-9-_\.]*){4,20}$/i'
Ahora coincide con 'aa - aa' pero no con 'aa--' y '--aa'. ¿Cualquier otra sugerencia
EDITA
al vez alguien quiera negar nombres de usuario que no se vean bien como " _ .. -a ". Esta expresión regular negará tener caracteres consecutivos no alfanuméricos:
/^(?=.{4,20}$)[a-z0-9]{0,1}([a-z0-9._-][a-z0-9]+)*[a-z0-9.-_]{0,1}$/i
En este caso_-this-is-me-_
no coincidirá, pero_this-is-me_
coincidirá
Que tengas un buen día y gracias a todos:)