2011-12-02 17 views
59

Estoy tratando de crear una prueba Regex en JavaScript que lo haga probar una cadena para contener cualquiera de los siguientes caracteres:.

!$%^&*()_+|~-=`{}[]:";'<>?,./ 

Más Información Si usted está interesado :)

es para una aplicación muy bien el cambio de contraseña que estoy trabajando en caso de que' re interesado aquí está el resto del código.

Tengo una tabla que enumera los requisitos de contraseña y como tipos de usuarios finales th Con la nueva contraseña, probará una matriz de expresiones regulares y colocará una marca de verificación en la fila de la tabla correspondiente si ... comprueba :) Solo necesito agregar esta en lugar del 4º elemento en la matriz validation.

var validate = function(password){ 
    valid = true; 

    var validation = [ 
     RegExp(/[a-z]/).test(password), RegExp(/[A-Z]/).test(password), RegExp(/\d/).test(password), 
     RegExp(/\W|_/).test(password), !RegExp(/\s/).test(password), !RegExp("12345678").test(password), 
     !RegExp($('#txtUsername').val()).test(password), !RegExp("cisco").test(password), 
     !RegExp(/([a-z]|[0-9])\1\1\1/).test(password), (password.length > 7) 
    ] 

    $.each(validation, function(i){ 
     if(this) 
      $('.form table tr').eq(i+1).attr('class', 'check'); 
     else{ 
      $('.form table tr').eq(i+1).attr('class', ''); 
      valid = false 
     } 
    }); 

    return(valid); 

} 

Sí, también hay correspondiente validación en el servidor!

+4

es bastante curioso que la respuesta a su pregunta está en el título, con la excepción de escapar caracteres especiales y que encierra barras diagonales – sciritai

+1

por qué no usar ' .addClass ("check") 'and' .removeClass ("check") '? Y ver' if (someBoolean == true) 'en el código siempre me da escalofríos. Simplemente haz' if (someBoolean) '. O, mejor aún, simplemente haga '$ (". Form table tr "). Eq (i + 1) .toggleClass (" check ", !! this); valid = valid && !! this; '. – gilly3

+0

+1 @ gill3 thx para la revisión del código: excelente respuesta. Definitivamente he usado esos métodos de mano corta en el pasado. – pixelbobby

Respuesta

119

La expresión regular de esto es realmente simple. Solo usa una clase de personaje. El guión es un carácter especial en las clases de caracteres, por lo que debe ser en primer lugar:

/[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]/ 

también necesita para escapar de los otros metacaracteres de expresiones regulares.

Editar: El guión es especial, ya que puede ser usado para representar un rango de caracteres. Esta misma clase de caracteres se puede simplificar con rangos para esto:

/[$-/:-?{-~!"^_`\[\]]/ 

Hay tres rangos. '$' a '/', ':' a '?', y '{' a '~'. la última cadena de caracteres no puede ser representado más simplemente con un rango:!. "^ _` []

utilizar un ACSII table encontrar rangos de clases de personajes

+0

¿Por qué no se mencionan los cuantificadores \ Q y \ E para escapar de la secuencia de caracteres? – SerG

+0

Antes de encontrar esta solución, estaba bajando la ruta de exclusión de clases de caracteres: unir todo PERO alfa, dígitos, espacio en blanco, etc. –

+1

¿Es de conocimiento público que los guiones deben aparecer primero? He leído docenas de respuestas SO y hojas de trucos para expresiones regulares, esta es la primera vez que escucho sobre ella. Tu respuesta me salvó mucho drama. ¡Gracias! –

-3

Reemplazar todos estos últimos de cualquier idioma en '. a', y si lo desea, por ejemplo, todos los dígitos de 0:.

return str.replace(/[^\[email protected][-`{-~]/g, "A").replace(/\d/g, "0"); 
+5

¿Qué pregunta estás respondiendo? – Toto

Cuestiones relacionadas