0

是否可以同时验证所提供的数据是电话号码的形式并将其缩减为仅验证器中的数字?

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

还是事后我必须将输入转换为纯数字格式?

4

2 回答 2

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);

最后,这里有一篇文章更详细地解释了使用 DataAnnotations 启用验证

于 2012-06-16T01:49:34.250 回答
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)
于 2012-06-16T02:28:02.610 回答