使用也接受空的属性验证密码长度

本文关键字:验证 属性 密码 | 更新日期: 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; }