使用也接受空的属性验证密码长度
本文关键字:验证 属性 密码 | 更新日期: 2023-09-27 18:03:27
我想在编辑时验证密码长度,如果输入了密码,否则应该认为是空的
我看到有人建议跳过编辑模型中的密码属性,并在代码中进行验证,但我想使用属性进行所有验证。
看起来库中应该已经有这样的东西了。是我错过了吗?
我在AspNet 3.5上使用EntLib 5 VAB和MVC 2。
香草编辑模型:
[PropertiesMustMatch("Password", "ConfirmPassword", ErrorMessage = "The password and confirmation password do not match.")]
public class EditAccountModel
{
public Guid ProviderUserKey { get; set; }
[Required]
[DisplayName("User name")]
public string UserName { get; set; }
[Required]
[Email(ErrorMessage = "Not a valid email")]
[DataType(DataType.EmailAddress)]
[DisplayName("Email address")]
public string Email { get; set; }
//[ValidatePasswordLength] <- Requires password
[DataType(DataType.Password)]
[DisplayName("Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[DisplayName("Confirm password")]
public string ConfirmPassword { get; set; }
}
ValidatePasswordLengthAttribute
不是MVC核心的一部分,而是在你的项目中从默认的MVC项目模板中创建的,在AccountModels.cs中。您可以自由地修改它的实现。修改IsValid
方法,接受null
和空字符串作为有效值。
public override bool IsValid(object value) {
string valueAsString = value as string;
return String.IsNullOrEmpty(valueAsString) || valueAsString.Length >= _minCharacters);
}
这适用于MVC4和jQuery 1.8。
密码要求至少9个字符,1个特殊字符,1个数字,1个大写字母。
[DisplayName("Password")]
[RegularExpression(@"^.*(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*'(')_'-+=]).*$", ErrorMessage = "User_Password_Expression")]
[StringLength(20, MinimumLength = 9, ErrorMessage = "length err")]
[DataType(DataType.Password)]
public override sealed string Password { get; set; }
您可以创建新的自定义验证属性。
Public Class MyCustomValidation : RegularExpressionAttribute
{
public MyCustomValidation() : base([Your regular expression])
{}
}
并按如下方式修改代码:
[MyCustomValidation(ErrorMessage = "")]
[DataType(DataType.Password)]
[DisplayName("Password")]
public string Password { get; set; }