3

我想驗證密碼長度編輯如果輸入密碼否則應認爲是空的。使用也接受空的屬性驗證密碼長度?

我已經看到了在編輯模型中跳過密碼屬性並在代碼中進行驗證的建議,但是我想爲所有驗證使用屬性。

似乎在圖書館裏應該有這樣的東西。我是否錯過了它?
我在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; } 
} 

回答

3

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); 
} 
+0

非常好!謝謝! :) –

1

您可以創建新的custom validation attribute

Public Class MyCustomValidation : RegularExpressionAttribute 
{ 
    public MyCustomValidation() : base([Your regular expression]) 
    {} 
} 

並修改如下代碼:

[MyCustomValidation(ErrorMessage = "")] 
[DataType(DataType.Password)] 
[DisplayName("Password")] 
public string Password { get; set; } 
1

這適用於MVC4和jQuery 1.8。

要求是最少9個字符長度,1個特殊字符和1個數字,並且1個大寫字母是密碼中必需的。

[DisplayName("Password")] 
[RegularExpression(@"^.*(?=.*[A-Z])(?=.*[0-9])(?=.*[[email protected]#$%^&*\(\)_\-+=]).*$", ErrorMessage = "User_Password_Expression")] 
[StringLength(20, MinimumLength = 9, ErrorMessage = "length err")] 
[DataType(DataType.Password)] 
public override sealed string Password { get; set; }