2015-03-25 22 views
0

我想驗證, 我有文本框,我想驗證該網站正在打開的國家的郵政編碼。就像如果我在U.k中打開網站,那麼當我在文本框中編寫郵政編碼時,文本框應該只驗證使用流暢驗證的U.K郵政編碼。我已經在這裏嘗試了一些代碼,但它不工作。如何驗證流利驗證中的自定義相關驗證?像驗證不同國家的郵政編碼

驗證器類文件

public Ekhati_AdminUser_Mst_Validator() 
     { 
      RuleFor(x => x.Postcode).NotEmpty().Must(IsValidCountryCategory).WithMessage("Select a valid country"); 
     } 

     public bool IsValidCountryCategory(Ekhati_AdminUser_Mst customer, string homeCountry) 
     { 
      homeCountry = "^(([0-9]{5})*-([0-9]{4}))|([0-9]{5})$"; 
      var ValidCountries = new List<string>(); 

      //categorias v�lidas para clientes do tipo R 
      ValidCountries.Add("^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$"); 
      return ValidCountries.Contains(homeCountry); 
     } 

和CSHTML頁

@Html.ValidationMessageFor(model=>model.Postcode, String.Empty, new { @style = "color:red;!important" }) 

這裏

我嘗試只是爲了測試這個靜態條目。

回答

0

在你的代碼比較輸入字符串正則表達式的值,它是錯誤的:如果Regex對象相匹配的字符串,你建議立即進行刪除檢查。對於一個正則表達式驗證您可以使用Matches規則:

public Ekhati_AdminUser_Mst_Validator() 
{ 
    var homeCountry = "^(([0-9]{5})*-([0-9]{4}))|([0-9]{5})$"; 

    RuleFor(x => x.Postcode).NotEmpty().Matches(homeCountry).WithMessage("Select a valid country"); 
} 

如果您需要驗證輸入字符串與一個以上的正則表達式 - 在您的示例使用Must規則一樣,但是改變驗證方法:

public Ekhati_AdminUser_Mst_Validator() 
{ 
    RuleFor(x => x.Postcode).NotEmpty().Must(IsValidCountryCategory).WithMessage("Select a valid country"); 
} 

public bool IsValidCountryCategory(Ekhati_AdminUser_Mst customer, string homeCountry) 
{ 
    var validCountries = new List<Regex>(); 

    validCountries.Add(new Regex("^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$")); 
    validCountries.Add(new Regex("...")); // another regexp 

    var validity = true; 
    foreach(var regexp in validCountries) 
    { 
     if (!regexp.IsMatch(homeCountry)) 
     { 
      validity = false; 
      break; 
     } 
    } 
    return validity; 
} 

Matches規則的優點是客戶端驗證支持,但不能對一個屬性使用多個匹配規則。