我有一个奇怪的场景。我有一个包含当前密码、新密码和确认新密码字段的表单。
- 当前密码是必需的。
- 除非用户想要更改新密码,否则不需要新密码,在这种情况下必须满足正则表达式要求 (
^(?=.*[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 的提示将不胜感激。谢谢你。