jQuery Validate plugin – comprobación de contraseña – requisitos mínimos – Regex

Tengo un pequeño problema con mi comprobador de contraseñas.

Hay un formulario de registro con algunos campos. Uso el complemento jQuery Validate para validar las entradas de usuario.

Todo funciona, excepto la contraseña de validación:

La contraseña debe cumplir con algunos requisitos mínimos:

  • longitud mínima: 8 -> Solo uso ‘minlength: 8’
  • al menos un personaje en minúsculas
  • al menos un dígito
  • Caracteres permitidos: AZ az 0-9 @ * _ -. !

Por el momento, uso este código para validar la contraseña:

$.validator.addMethod("pwcheck", function(value, element) { return /^[A-Za-z0-9\d=!\-@._*]+$/.test(value); }); 

Este Código funciona para los caracteres permitidos pero no para los requisitos mínimos. Sé que puede usar, por ejemplo, (?=.*[az]) para un requisito de minúscula. Pero simplemente no consigo que funcione.

Si agrego (?=.*[az]) el código completo ya no funciona. Necesito saber cómo agregar correctamente el código al existente.

¡Gracias por sus respuestas!

Este es el código completo

  $(function() { $("#regform").validate({ rules: { forename: { required: true }, surname: { required: true }, username: { required: true }, password: { required: true, pwcheck: true, minlength: 8 }, password2: { required: true, equalTo: "#password" }, mail1: { required: true, email: true }, mail2: { required: true, equalTo: "#mail1" } }, messages: { forename: { required: "Vornamen angeben" }, surname: { required: "Nachnamen angeben" }, username: { required: "Usernamen angeben" }, password: { required: "Passwort angeben", pwcheck: "Das Passwort entspricht nicht den Kriterien!", minlength: "Das Passwort entspricht nicht den Kriterien!" }, password2: { required: "Passwort wiederholen", equalTo: "Die Passwörter stimmen nicht überein" }, mail1: { required: "Mail-Adresse angeben", email: "ungültiges Mail-Format" }, mail2: { required: "Mail-Adresse wiederholen", equalTo: "Die Mail-Adressen stimmen nicht überein" } } }); $.validator.addMethod("pwcheck", function(value, element) { return /^[A-Za-z0-9\d=!\-@._*]+$/.test(value); }); });  

Si agrego (?=.*[az]) el código completo ya no funciona.

Agrégalo aquí:

 /^(?=.*[az])[A-Za-z0-9\d=!\-@._*]+$/ 

Sin embargo, es mucho más fácil hacer esto sin mirar hacia adelante:

 $.validator.addMethod("pwcheck", function(value) { return /^[A-Za-z0-9\d=!\-@._*]*$/.test(value) // consists of only these && /[az]/.test(value) // has a lowercase letter && /\d/.test(value) // has a digit }); 

Bueno, puedes usar {8,} en lugar de “+” para un mínimo de 8 caracteres sin máximo o mejor aún un {8, 20} para un mínimo de 8 y un máximo de 20.

Realmente, no veo el valor de tratar de exprimir toda tu validación en una sola expresión regular. Si lo divide, es mucho más fácil de mantener, menos propenso a errores, y le permite informar al usuario la razón específica POR QUÉ falló la contraseña en lugar de todo el requisito.

Podrías dividirlo en unos pocos cheques

 //proper length value.length >= 8 //only allowed characters /^[A-Za-z0-9\d=!\-@._*]+$/.test(value) //has a digit /\d/.test(value) //has a lowercase letter /[az]/.test(value) 

No estoy familiarizado con el complemento jQuery Validation, pero supongo que podría devolver un útil mensaje útil para cada prueba que falló.

si desea verificar la contraseña y la validación mínima del carácter , puede usar

   

La validación de contraseña puede usar varias reglas, por ejemplo:

 var _validatePassword = function (validateUserNameRules, inputModel) { //bolean parameter validateUserNameRules -> true/false //this method recive a model like this: //inputModel.userName -> string //inputModel.password -> string //inputModel.password2 -> String var ResultModel = { ResultId: 1, //1 success Message: "Password is correct." }; if (validateUserNameRules && inputModel.userName == "") { ResultModel.ResultId = 2; ResultModel.Message = "Error: User name cannot be blank."; return (ResultModel); } var re = /^\w+$/; if (validateUserNameRules && !re.test(inputModel.userName)) { ResultModel.ResultId = 2; ResultModel.Message = "Error: Username must contain only letters, numbers and underscores."; return (ResultModel); } if (inputModel.password != "" && inputModel.password == inputModel.password2) { if (inputModel.password.length < 6) { ResultModel.ResultId = 2; ResultModel.Message = "Error: Password must contain at least six characters."; return (ResultModel); } if (validateUserNameRules && inputModel.password == inputModel.userName) { ResultModel.ResultId = 2; ResultModel.Message = "Error: Password must be different from the Account Name."; return (ResultModel); } re = /[0-9]/; if (!re.test(inputModel.password)) { ResultModel.ResultId = 2; ResultModel.Message = "Error: Password must contain at least one number (0-9)."; return (ResultModel); } re = /[az]/; if (!re.test(inputModel.password)) { ResultModel.ResultId = 2; ResultModel.Message = "Error: Password must contain at least one lowercase letter (az)."; return (ResultModel); } re = /[AZ]/; if (!re.test(inputModel.password)) { ResultModel.ResultId = 2; ResultModel.Message = "Error: Password must contain at least one uppercase letter (AZ)."; return (ResultModel); } } else { ResultModel.ResultId = 2; ResultModel.Message = "Error: Please check that you've entered and confirmed your password."; return (ResultModel); } return (ResultModel); //success password validation!! };