使用DataAnnotation进行电话验证

时间:2016-08-05 07:43:29

标签: c# asp.net .net validation data-annotations

我想验证我的电话号码,对于每个无效的情况,我想提出另一条错误消息:

所以,我的验证规则是:

  1. 仅9位数 - >错误消息="错误消息1"
  2. 数字不能是相同的数字,例如222222222>错误 message ="错误消息2"
  3. 不能像' 123456789' >错误消息="错误消息3"
  4. 不能以0>开头错误消息="错误消息4"
  5. 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*$");
        }
    }
    

1 个答案:

答案 0 :(得分: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;
    }
 }