基于MVC .net注释的验证:从电话号码中删除破折号和括号

时间:2012-06-15 22:56:15

标签: asp.net-mvc validation asp.net-web-api

是否有可能同时验证所提供的数据是否为电话号码并将其减少到验证器中的数字?

  

输入:(902)837-2832
  输出有效:是,9028372832

或者我必须在事后将输入转换为仅数字格式吗?

2 个答案:

答案 0 :(得分:1)

以下是如何使用正则表达式验证的示例:

 [Required(ErrorMessage="Phone Number is required")]
 [RegularExpression("^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage="Not a valid number")]
 public string PhoneNumber { get; set; }

我们可能会使用字符串的Trim方法来清理电话号码并只获取数字。

char[] charsToTrim = { '(', ' ', ')', '-'};
string phoneNumber = "(123)-345-6789";
string result = banner.Trim(charsToTrim);

最后,这是一篇解释Enabling Validation using DataAnnotations in more detail

的帖子

答案 1 :(得分:1)

仅使用一个getter向模型添加属性,该getter返回绑定到输入的属性的精简版本。将验证属性放在该属性上。

public string PhoneNumber {get;set;}

[Required(ErrorMessage="Phone number is required.")]
[RegularExpression(@"\d{10}", ErrorMessage="Phone number is invalid.")]
public string PhoneNumberValue
{
    get 
    {
        var temp = PhoneNumber
        temp = Regex.Replace(temp, @"[^0-9]", "");
        temp = temp.Length == 11 && temp.StartsWith("1")
            ? temp.Substring(1) : temp;
    }

    set
    {
        // I can't remember off the top of my head if MVC model
        // binding requires a setter or not. If so, just leave this
        // empty. Otherwise you can remove it entirely.
    }
}

然后,在您的视图中,只需呈现备用验证消息。

@Html.LabelFor(x=>x.PhoneNumber)
@Html.TextBoxFor(x=>x.PhoneNumber)
@Html.ValidationMessageFor(x=>x.PhoneNumberValue)