JQuery › Проверка › Если текстовое поле пусто, это нормально › Если пользователь вводит данные, проверьте с помощью регулярного выражения

У меня странный сценарий. У меня есть форма с текущим паролем, новым паролем и полем подтверждения нового пароля.

  • Требуется текущий пароль.
  • Новый пароль не требуется, если пользователь не хочет его изменить, в этом случае он должен соответствовать требованиям регулярного выражения (^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$&*\"]).{6,16}?$).
  • Подтверждение нового пароля не требуется, но совпадает с новым паролем.

Ниже приведено подключение MVC cshtml.

     <li>
       <label for="Password" class="required">Current Password</label>
          @Html.TextBoxFor(m => m.UserInfoData.Password, new
             {
                 @type = "password",
                 @class = "k-textbox",
                 @placeholder = "Current Password",
                 @validationmessage = "Current Password Required!",
                 @required = "required"
              })
      </li>
      <li>
         <label for="NewPassword" class="required">New Password</label>
            @Html.TextBoxFor(m => m.UserInfoData.NewPassword, new
               {
                  @type = "password",
                  @class = "k-textbox",
                  @placeholder = "New Password",
                  @required = "required",
                  @pattern = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$&*\"]).{6,16}?$",                                        
               })
     </li>
     <li>
         <label for="ConfirmNewPassword" class="required">Confirm New Password</label>
            @Html.TextBoxFor(m => m.UserInfoData.ConfirmNewPassword, new
               {
                  @type = "password",
                  @class = "k-textbox",
                  @placeholder = "Confirm New Password",
                  @verifypasswords = string.Empty
                })
   </li>

   <li class="confirm">
      <button class="k-button k-primary" type="submit" id="submitSetingsData">Update Details</button>
   </li>

Ниже приведено мое подключение jQuery с проверкой кендо.

$("#settings").kendoValidator({
        rules: {                
            verifyPasswords: function (input) {
                var result = true;
                if (input.is("[name=UserInfoData.ConfirmNewPassword]")) {
                    result = input.val() === $("#UserInfoData_NewPassword").val();
                }
                return result;
            }
        },
        messages: {                
            verifyPasswords: "New passwords do not match!"
        }
    });

Проверка работает нормально, но я не могу сделать поле «Новый пароль» необязательным. Шаблон HTML5 требует required, но я хочу сделать это поле необязательным, если пользователь оставит его пустым, я бы не стал проверять его, но если пользователь вводит какие-либо данные, он должен соответствовать регулярному выражению. Я использовал ? в конце регулярного выражения, но это не делает его необязательным. Буду очень признателен за любое возможное решение или подсказку по проверке кендо или html5. Спасибо.


person Mahib    schedule 24.01.2016    source источник


Ответы (1)


Возможно, добавление «или пусто» в регулярное выражение:

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$&*\"]).{6,16}?$|^$

| означает ИЛИ, а бит ^$ проверяет пустые строки. Попробовал это в валидаторе регулярных выражений, и он вернул положительный результат, когда я либо оставил строку пустой, либо использовал шаблон, совместимый с указанным вами регулярным выражением.

person David Eggman    schedule 24.01.2016
comment
На самом деле работает, если я снял требуемое с HTML5. Спасибо чувак. Это поможет мне двигаться вперед, пока я не получу лучшее решение. - person Mahib; 24.01.2016