validate strength password jquery regex passwords jquery-validate

strength - jquery regex



Complemento de validación de jQuery-Verificación de contraseña-Requisitos mínimos-Regex (4)

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

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

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

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

  • longitud mínima: 8 -> solo uso ''minlength: 8''
  • al menos un carácter en minúscula
  • al menos un dígito
  • Caracteres permitidos: AZ az 0-9 @ * _ -. !

En este momento utilizo 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 en minúsculas. Pero simplemente no lo hago funcionar.

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

<script> $(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); }); }); </script>


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

Añádelo aquí:

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

Sin embargo, es mucho más fácil hacer esto sin una búsqueda anticipada:

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


Bueno, puede 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, aunque no veo el valor de intentar comprimir toda su validación en una sola expresión regular. Si lo rompe, hace que sea mucho más fácil de mantener, menos propenso a errores, y le permite informar al usuario la razón específica POR LA QUE falló la contraseña en lugar de todo el requisito.

Podrías dividirlo en unos cuantos 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 /[a-z]/.test(value)

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


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 = /[a-z]/; if (!re.test(inputModel.password)) { ResultModel.ResultId = 2; ResultModel.Message = "Error: Password must contain at least one lowercase letter (a-z)."; return (ResultModel); } re = /[A-Z]/; if (!re.test(inputModel.password)) { ResultModel.ResultId = 2; ResultModel.Message = "Error: Password must contain at least one uppercase letter (A-Z)."; 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!! };


Si desea verificar la contraseña de confirmación y la validación de caracteres mínima , entonces puede usar

<input type="password" id="password" name="password" class="validate[required,minSize[8]]"/> <input type="password" id="confirm_password" name="confirm_password" class="validate[required,equals[password]]"/>