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 的提示将不胜感激。谢谢。

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

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

|表示 OR 和 ^$ 位根据空字符串进行验证。在正则表达式验证器中尝试过它,当我将字符串留空或使用与您指定的正则表达式兼容的模式时,它返回了正则表达式。

相关内容

  • 没有找到相关文章

最新更新