【问题标题】:Phone validation with DataAnnotation使用 DataAnnotation 进行电话验证
【发布时间】:2016-08-05 07:43:28
【问题描述】:

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

所以,我的验证规则:

  1. 只有 9 位数字 -> 错误消息 = “错误消息 1”
  2. 数字不能与相同的数字,例如 222222222 > 错误 message = "错误信息 2"
  3. 不能是像'123456789'这样的字符串>错误消息=“错误消息3”
  4. 不能以 0 开头 > 错误消息 =“错误消息 4”

我的电话属性:

[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*$");
    }
}

【问题讨论】:

  • 那么,问题是什么?
  • 我不知道如何创建带有不同错误消息的验证规则。
  • @Wenson 我想拥有自己的属性
  • var 模式 = /^\d{9}$/ 九位数

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


【解决方案1】:

这不是完美的解决方案,我稍后会改进它,但现在你可以尝试类似的方法(注意,这里我使用 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;
    }
 }

【讨论】:

  • 它工作正常,但我怎样才能将它实施到客户端验证?
  • 对不起,我答应改进它,但我真的没有时间。您应该使用 JavaScript(jquery.validate.js) 但它必须是一个新问题。如果有帮助,请采纳答案。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 2011-04-13
  • 2020-02-21
相关资源
最近更新 更多