Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用DataAnnotation进行电话验证_C#_Asp.net_.net_Validation_Data Annotations - Fatal编程技术网

C# 使用DataAnnotation进行电话验证

C# 使用DataAnnotation进行电话验证,c#,asp.net,.net,validation,data-annotations,C#,Asp.net,.net,Validation,Data Annotations,我希望验证我的电话号码,对于每个无效的情况,我希望有另一条错误消息: 因此,我的验证规则: 只有9位->错误消息=“错误消息1” 号码不能与同一号码相同,例如22222>错误 message=“错误消息2” 不能是类似“123456789'>错误消息=“错误消息3”的字符串 无法从0>错误消息=“错误消息4”开始 MyPhoneAttribute: [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] publi

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

因此,我的验证规则:

  • 只有9位->错误消息=“错误消息1”
  • 号码不能与同一号码相同,例如22222>错误 message=“错误消息2”
  • 不能是类似“123456789'>错误消息=“错误消息3”的字符串
  • 无法从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*$");
        }
    }
    

    这不是一个完美的解决方案,我稍后会对其进行改进,但现在您可以尝试以下方法(注意,这里我使用了
    ValidationAttribute
    但不是
    RegularExpressionAttribute
    作为基类):


    那么,问题是什么?我不知道如何使用不同的错误表创建验证规则。@Wenson我想为九位数字创建自己的attributevar模式=/^\d{9}$/这很好,但我如何将其应用于客户端验证?抱歉,我答应过要改进它,但我确实没有时间。您应该使用JavaScript(jquery.validate.js),但这必须是一个新问题。如果有帮助,请接受答案。谢谢
    [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;
        }
     }