2011-01-08 21 views
10

que necesito para validar Regexp cadena tiene longitud mínima de 6 y se contiene al menos un carácter no alfanumérico por ejemplo: "eN%{S$u)", "h9YI!>4j", "{9YI!;4j", "eN%{S$usdf)", "dfh9YI!>4j", "ghffg{9YI!;4j"..NET Expresión regular que verifican longitud y caracteres no alfanuméricos

Este funciona bien ^.*(?=.{6,})(?=.*\\d).*$" pero en los casos en que el hilo no contiene ningún número (por ejemplo, "eN%{S$u)") no está funcionando.

Respuesta

10
^(?=.{6})(.*[^0-9a-zA-Z].*)$ 

Usamos un look-up positivo para asegurar que haya al menos 6 caracteres. Luego hacemos coincidir el patrón que busca al menos un carácter no alfanumérico ([^0-9a-zA-Z]). El .* 's encontró ningún número de caracteres en torno a este un carácter no alfanumérico, pero en el momento en que hemos llegado aquí ya hemos comprobado que estamos haciendo juego al menos 6.

^.*(?=.{6,})(?=.*\\d).*$" 

es el expresiones regulares que probaste Aquí hay algunas sugerencias:

  • No es necesario que coincida con más de 6 caracteres en la búsqueda anticipada. Hacer coincidir solo 6 aquí no restringe el resto de la expresión regular para que coincida con más de 6.
  • \d coincide con un dígito, y (?=.*\\d) es un vistazo para uno de ellos. Es por esto que está experimentando los problemas que mencionó con cadenas como eN%{S$u).
  • Incluso si el punto anterior no era incorrecto y la expresión regular aquí era correcta, puede combinar la segunda anticipación con .* que sigue simplemente usando .*\\d.*.
1

Manténgalo fácil.

// long enough and contains something not digit or a-z 
x.Length >= 6 && Regex.IsMatch(x, @"[^\da-zA-Z]") 

Happy coding.

Editar, pura "expresión regular":

Esta primera afirma que hay 6 cartas de nada en el aspecto de la ventaja, y luego asegura que dentro de la visión hacia adelante hay algo que no está alfa- numérico (se "tirará" hasta los primeros 5 caracteres que intentan coincidir).

(?=.{6}).{0,5}[^\da-zA-Z] 
+0

Estoy manteniendo las expresiones regulares en el archivo de configuración, no puedo hacerlo. – Reg

+0

Esta entrada falla: 'lucero-1' – Lucero

+0

@Lucero Verifique nuevamente. Esa entrada no falla. Pasa la expresión regular, como se indica en los requisitos: "la cuerda tiene una longitud mínima de 6 y contiene al menos un carácter no alfanumérico". En este caso, el "-" satisface el segundo requisito y, bueno, la longitud el primero. Buena inversión en tu respuesta, por cierto. –

0

¿Qué hay de que (fijo): ^(?=.{6})(.*[^\w].*)$

mira esto es http://www.ultrapico.com/Expresso.htm herramienta fresca que podría ayudarle mucho en el aprendizaje de las expresiones regulares.

+0

Comprobar en la entrada '! @ # $% ^' –

+0

Parece que la expresión se rompió de alguna manera (esperaría ver algunos '. *' Y '\ w' en sus respectivos lugares para la expresión tener sentido). – Lucero

+0

has soltado una barra invertida en una de tus ediciones. '[^ w]' debe ser '[^ \ w]' o '\ W'. –

3

La respuesta de marcog es bastante buena, pero lo haría al revés para que sea más fácil agregar aún más condiciones (como tener al menos un dígito o lo que sea), y usaría cuantificadores perezosos porque son más baratos para ciertos patrones:

^(?=.*?[^0-9a-zA-Z]).{6} 

Así que si tuviera que añadir la condición adicional mencionado, sería así:

^(?=.*?[^0-9a-zA-Z])(?=.*?[0-9]).{6} 

como se puede ver, este patrón es fácilmente extensible.Tenga en cuenta que está diseñado para usarse solo para verificar coincidencias, su captura no es útil.

Cuestiones relacionadas