0

我有一个奇怪的场景。我有一个包含当前密码、新密码和确认新密码字段的表单。

  • 当前密码是必需的。
  • 除非用户想要更改新密码,否则不需要新密码,在这种情况下必须满足正则表达式要求 ( ^(?=.*[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 的提示将不胜感激。谢谢你。

4

1 回答 1

1

也许在正则表达式中添加“或为空”:

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

|手段OR^$bit 针对空字符串进行验证。在正则表达式验证器中尝试了它,当我将字符串留空或使用与您指定的正则表达式兼容的模式时,它返回了正数。

于 2016-01-24T17:59:50.960 回答