2008-10-03 28 views
9

necesito una expresión regular (php) para que coincida con las reglas de nombre de usuario de Yahoo:Regex nombre de usuario

Uso de 4 a 32 caracteres y comenzar con una letra. Puede usar letras, números, guiones bajos y un punto (.).

+1

¿Qué tipo de expresiones regulares se va a hacer esto? ¿Qué herramienta? A menos que sea un motor PCRE (utilizado en Python y Ruby), varias herramientas tienen varias sintaxis de expresiones regulares. – Axeman

+1

php, como he dicho. aunque podría refinarlo a php 4. algo – magicrobotmonkey

Respuesta

16
/^[A-Za-z](?=[A-Za-z0-9_.]{3,31}$)[a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*$/ 

O un poco más corto:.

/^[a-z](?=[\w.]{3,31}$)\w*\.?\w*$/i 
+1

pruebas iniciales parecen confirmar que este funciona. No estoy seguro de por qué ... – magicrobotmonkey

+0

bien después de leer acerca de las miradas, lo entiendo ahora, es un hombre bastante enfermo, gracias – magicrobotmonkey

+1

agregue '/ i' al final para mayúsculas y minúsculas. De esta manera, no es necesario que especifique letras minúsculas y mayúsculas. – CyberJunkie

2

¿Un límite de un punto? Eso es complicado.

No soy un experto expresiones regulares, pero creo que esto sería conseguirlo, a excepción de que:

[A-Za-z][A-Za-z0-9_.]{3,31} 

tal vez se podría comprobar la. requisito por separado?

+0

Este necesita anclajes '^' y '$' para aplicar el requisito de longitud. – ridgerunner

+0

¿Cómo cambiarías esto por 1 guión bajo único manteniendo todas las demás restricciones? – Joel

+1

@Joel de la misma manera que hice para un punto: imponerlo por separado de la expresión. –

7
/[a-zA-Z][a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*/ 

Y comprobar si strlen ($ nombre de usuario)> = 4 y < = 32.

+0

Ahora si pudiéramos encontrar una manera de combinar estos, solo que DEBE coincidir con ambos. –

+0

Sí. strlen es una operación bastante rápida, sin embargo. – Randy

+0

pero no tengo la oportunidad de usar strlen, en el lugar donde estoy, una expresión regular es todo lo que obtengo. – magicrobotmonkey

1

El uso de los símbolos de anticipación se podría hacer lo siguiente:

^(?=[A-Za-z](?:\w*(?:\.\w*)?$))(\S{4,32})$ 

Debido a que no especificó qué tipo de la expresión regular que necesita Agregué muchas cosas compatibles con Perl 5. Como (?: ...) para parens no capturados.

Nota: he añadido el paréntesis de cierre que falta de vuelta en

+0

A esta le falta una paren de cierre, y una vez que la agregue (intenté un par de lugares ...) No puedo hacer que coincida con las cuerdas que le lanzo. – magicrobotmonkey

Cuestiones relacionadas