2016-08-05 48 views
-1

我想驗證我的電話號碼,併爲每一個非有效的情況下,我想有另一條錯誤消息電話驗證:與DataAnnotation

所以,我的驗證規則:

  1. 只有9位 - >錯誤信息=「錯誤消息1」
  2. 數不能與相同數量的例如222222222>錯誤 消息=「錯誤消息2」
  3. 不能是串像「123456789」>錯誤信息=「錯誤消息3「
  4. 不能由0開始>錯誤信息=「錯誤消息4」

MyPhoneAttribute:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] 
public class MyPhoneAttribute : RegularExpressionAttribute 
{ 
    private const string myRegex = @"^([0-9]{9}){0,1}$"; 

    public MyPhoneAttribute() : base(myRegex) 
    { 
     ErrorMessage = "default error message"; 
    } 

    public override bool IsValid(object value) 
    { 
     if (string.IsNullOrEmpty(value as string)) 
      return true; 

     if (value.ToString() == "123456789") 
     { 
      return false; 
     } 

     if (Regex.IsMatch(value.ToString(), @"^([0-9])\1*$")) 
     { 
      return false; 
     } 

     return Regex.IsMatch(value.ToString(), @"^([0-9])\1*$"); 
    } 
} 
+0

那麼,是什麼問題? – Marusyk

+0

我不知道如何創建具有不同錯誤消息的驗證規則。 – Cieja

+1

http://www.codeguru.com/csharp/.net/validating-data-using-data-annotation-attributes-in-asp.net-mvc.htm – Wenson

回答

0

這不是完美的解決方案,我稍後會改善,但現在你可以試試像(注意,這裏我使用ValidationAttribute但不RegularExpressionAttribute作爲基類):

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] 
public class MyPhoneAttribute : ValidationAttribute 
{ 
    private const string nineDigitsPattern = @"^([0-9]{9}){0,1}$"; 
    private const string sameNumberPattern = @"(\w)\1{9,}"; // here 9 the same numbers 

    public override bool IsValid(object value) 
    { 
     var validationNumber = (string)value; 

     if (string.IsNullOrEmpty(validationNumber)) 
      return true; 

     // case 4 
     if (validationNumber.StartsWith("0")) 
     { 
      ErrorMessage = "error message 4"; 
      return false; 
     } 

     // case 3  
     if (validationNumber.Equals("123456789")) 
     { 
      ErrorMessage = "error message 3"; 
      return false; 
     } 

     // case 2 
     if (Regex.IsMatch(validationNumber, sameNumberPattern)) { 
      ErrorMessage = "error message 2"; 
      return false; 
     } 

     // case 1 
     if (Regex.IsMatch(validationNumber, nineDigitsPattern)) 
     { 
      ErrorMessage = "error message 1"; 
      return false; 
     } 

     return true; 
    } 
} 
+0

工作正常,但我怎麼能將它實現到客戶端驗證? – Cieja

+0

對不起,我承諾改善它,但我真的沒有時間。你應該使用JavaScript(jquery.validate.js),但它必須是一個新問題。如果有幫助,請接受答案。謝謝 – Marusyk