【问题标题】:JQuery > Validation > If textbox empty is fine > If user gives an input, validate with regexJQuery > 验证 > 如果文本框为空就可以 > 如果用户提供输入,则使用正则表达式进行验证
【发布时间】:2016-01-24 17:50:21
【问题描述】:

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

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

【问题讨论】:

    标签: regex asp.net-mvc html validation kendo-validator


    【解决方案1】:

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

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

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

    【讨论】:

    • 如果我从 HTML5 中去掉“必需”,实际上可以工作。谢啦。这将帮助我继续前进,直到找到更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多