2010-01-11 8 views
6

necesito la siguiente comprobación de validación fuerte contraseña:contraseña fuerte expresión regular que coincide con cualquier Char especial

  • Al menos 7 caracteres
  • Al menos 1 mayúscula char (AZ)
  • al menos 1 número (0-9)
  • al menos un carbón especial

encontré y ajustado una expresión regular y es como esto (lo siento, he perdido la referencia ...):

^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@'#.$;%^&+=!""()*,-/:<>?]).*$ 

que está funcionando en C# excepto por el hecho de que necesito para combinar con cualquier Char especial, y me refiero a CUALQUIER . En otras palabras, necesito que el "carácter especial" sea cualquier cosa pero números y letras mayúsculas/minúsculas.

Editar:

En aras de la claridad, vamos a considerar que acentúa son caracteres especiales, por lo que é, ñ y similares deben ser considerados caracteres especiales en el contexto de esta pregunta.

+10

Personalmente, no utilizaría una expresión regular para esto, porque es fácil de romper y ofusca las reglas reales para la validación. ¿Por qué molestarse? Simplemente escribe 4 pruebas sencillas de coincidencia de cadenas. – Triptych

+0

¡Probaré el método de concordancia de cadenas! – BrunoSalvino

+4

Sus reglas están limitando la elección del usuario de los caracteres y, en lugar de ayudar a que la contraseña sea más segura, lo hacen menos. ¿Por qué me obligarías a usar letras latinas solo para mi contraseña? –

Respuesta

8
^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).*$ 
+0

'[^ a-zA-Z0-9]' coincidirá con 'é': no es un tema realmente especial ... :) –

+3

Dijo que" todo menos los números y las letras mayúsculas/minúsculas ", creo é califica. –

+2

Creo que Bart está tratando de decir que '[^ a-zA-Z0-9]' debe coincidir con cualquier carácter que * no sea una letra *, pero coincidirá con 'é' que sin duda * es * una letra (I cree que tratará otras letras "internacionales" como å, ñ y demás, lo cual no debería) –

4

creo que: -

\ w

Coincide con cualquier carácter de palabra.

La inversa es: -

\ W

¿Qué es lo que quieres.

Editar

^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W_]).*$ 

prueba sus expresiones regulares en: -

http://www.nregex.com/nregex/default.aspx

+1

falla por subrayado. –

+0

Bueno, Yuriy. Enmendado –

1

Echa un vistazo aquí: Unicode Regular Expressions y recoger una clase de Unicode, como \p{Symbol} o \p{Punctuation}

+0

Sí, '\ p {Puntuaciones}' y '\ p {Symbol}' es lo que haría. +1 –

0

Prueba esto:

^(?=.{7,})(?=.*?\d)(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[@'#.$;%^&+=!"()*,-/:<>?]) 
5

(no código C#)

def validate (value): 
    return (value.Length >= 7 && 
      value.IndexOfAny(['0', ..., '9']) >= 0 && 
      value.IndexOfAny(['A', ..., 'Z']) >= 0 && 
      value.IndexOfAny(['@', ..., ')'])); 

Sí sé que esto no es lo que requiere la pregunta, pero creo que es mucho más claro, tienen un rendimiento más alto y más fácil de mantener que cualquier solución RegExp.

+0

Me gusta esto también. +1. –

+0

Esto realmente mejora la legibilidad. – BrunoSalvino

Cuestiones relacionadas