2013-09-11 2 views
13

У меня есть небольшая проблема с моей проверкой пароля.jQuery Подтвердить плагин - проверка пароля - минимальные требования - Regex

У нас есть форма регистрации с некоторыми полями. Я использую плагин jQuery Validate для проверки пользовательских входов.

Это все работает, кроме пароля-проверки:

Пароль должен соответствовать минимальным требованиям:

  • минимальная длина: 8 -> Я просто использовать 'MINLENGTH: 8'
  • по крайней мере, один строчный символ
  • не менее одной цифры
  • Допустимые символы: AZ az 0-9 @ * _ -. !

В настоящее время я использую этот код для проверки пароля:

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

Этот код работает для разрешенных символов, но не для минимальных требований. Я знаю, что вы можете использовать, например, (?=.*[a-z]) для нижнего регистра. Но я просто не работаю.

Если я добавлю (?=.*[a-z]), весь код не работает. Мне нужно знать, как правильно добавить код в существующий.

Благодарим за ответы!

Это полный код

<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=!\[email protected]_*]+$/.test(value); 
        }); 
       }); 
       </script> 
+0

Показать остальную часть кода. Где ваш '.validate()' вызов? Где HTML-разметка формы? – Sparky

+0

Где вы добавили взгляд? Покажите нам код, который вы пробовали, не свою рабочую версию. – Bergi

+0

Я добавил его почти везде. Не менее 20 разных позиций. У меня больше нет кода ... Должен сказать, что я очень новичок в этом. Так что простите меня. Я уверен, что это просто скобка или что-то вроде того, что я забыл. – bayerphi

ответ

31

Если я добавлю (?=.*[a-z]), весь код не работает.

Добавьте его здесь:

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

Однако, это гораздо проще сделать это без опережающего просмотра:

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

Почти забыл отметить, как решил. Еще раз спасибо! – bayerphi

+0

Привет, как насчет наличия хотя бы одной буквы с верхним регистром и хотя бы одного специального символа (например, # $% '^,() * +.: | =? @ /] [_ '{} \!; - ~) – Yves

+0

@Yves /[AZ].test(value) // имеет прописную букву && /[=!\[email protected]_*]/.test(value) . Разверните последний с дополнительными символами, но обязательно включите их в первом шаблоне, или ваша строка будет аннулирована, прежде чем вы сможете проверить наличие специального символа. – hepabolu

2

Ну вы можете использовать {8,} вместо «+» в течение как минимум 8 символов, не имеющих максимум или еще лучше в {8, 20} как минимум из 8 и максимум 20.

Действительно, хотя я не вижу значения, пытаясь сжать всю вашу проверку в одном регулярном выражении. Если вы разобьете его, это упростит работу, уменьшит вероятность ошибок, и он позволит вам сообщить пользователю конкретную причину, почему пароль был сработал, а не все требования.

Вы можете разбить его на несколько чеков

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

Я не знаком с плагином JQuery Validation, но я предполагаю, что вы могли бы вернуться полезные полезные сообщения для каждого теста, который не удалось.

+0

Правда. Я попробую сделать это в следующий раз. Извините, но я очень новичок в кодировании :) Спасибо! – bayerphi

0

если вы хотите проверить подтверждения пароля и минимум символов подтверждения, то вы можете использовать

<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]]"/> 
0

проверки пароля можно использовать несколько правил, например:

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!! 
    }; 
Смежные вопросы