我有一个奇怪的场景。我有一个包含当前密码,新密码和确认新密码字段的表单。
- 当前密码是必需的。
- 除非用户想要更改新密码,否则不需要新密码,在这种情况下,必须满足正则表达式要求(
^(?=.*[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 和 ^$
位根据空字符串进行验证。在正则表达式验证器中尝试过它,当我将字符串留空或使用与您指定的正则表达式兼容的模式时,它返回了正则表达式。