2010-02-07 11 views
10

Estoy creando un sistema de registro que debe comprobar el nombre/contraseña, etc., con Regex (y prefieren), lo que tengo hasta ahora es:PHP: expresiones regulares simples para coincidir con la longitud?

//Check so numbers aren't first, such as 00foobar 
preg_match('/^(?!\d)[a-z0-9]+$/iD',$usrname); 
//Just simple check 
preg_match('/^[a-zA-Z0-9]+$/',$psword); 

Pero tengo que hacer cosas estúpidas en instrucciones IF como:

if strlen($psword) > 30 || if (strlen($psword) < 4) ....

¿Cómo me impliment la comprobación de longitud en mis dos declaraciones de expresiones regulares originales? Esto me haría tan feliz ..

+0

No creo que el 'si' sea estúpido en absoluto. Es perfectamente legible; no tienes que hacer todo en una sola expresión regular. De cualquier manera, * por favor * permita más caracteres que eso en las contraseñas. Como alguien a quien le gusta usar contraseñas seguras con una amplia gama de puntuación, no hay nada más frustrante que un sitio que innecesariamente limita las contraseñas a los alfanuméricos. – bobince

+0

@bobince 30 sonó como un número suficientemente bueno, uno "grande", estoy trabajando en un proyecto con alguien, así que lo agregaré más alto y lo explicaré. –

Respuesta

15

mismo pero usando el \ d w y \ por palabra y los dígitos, pero es posible que desee también incluir símbolos básicos como %!?/ ... etc...

preg_match('/^[\w\d]{4,30}$/',$psword); 

la {n,v} validaría para n mínimo y máximo de elementos V antes de .

como A{2,3} validaría para AA y AAA. Puede echar un vistazo there para obtener más referencias

De la misma manera, si solo desea establecer el mínimo de patern {n} lo haría.

+1

Si establece qué tamaño puede tener una contraseña, sugeriría más de 30 caracteres. Algunas personas tienen contraseñas largas y son buenas para ellas. Es mas seguro –

+0

Dado que tiene 30 caracteres: 'thisais30characterspasswordyay'. Sé que una de mis contraseñas es más larga que eso. –

+0

@ Charchar102, tienes razón, pero esto es para un juego simple, así que lo mantendré en 40. –

4

creo que esto debería hacer el truco:

preg_match ('/^[a-zA-Z0-9] {4,30} $ /', $ psword);

Cuestiones relacionadas