Asp.net mvc 基于MVC.net注释的有效性:从电话号码中删除破折号和括号

Asp.net mvc 基于MVC.net注释的有效性:从电话号码中删除破折号和括号,asp.net-mvc,validation,asp.net-web-api,Asp.net Mvc,Validation,Asp.net Web Api,是否可以验证提供的数据是否以电话号码的形式存在,并将其精简为验证程序中的号码 输入:(902)837-2832 输出:有效:是,9028372832 或者,我必须在事实发生后将输入转换为仅数字格式吗?下面是一个如何使用正则表达式进行验证的示例: [Required(ErrorMessage="Phone Number is required")] [RegularExpression("^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", Er

是否可以验证提供的数据是否以电话号码的形式存在,并将其精简为验证程序中的号码

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


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

下面是一个如何使用正则表达式进行验证的示例:

 [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; }
我们可以使用字符串的修剪方法来清理电话号码,只获取数字

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

最后,这里有一篇文章解释了如何在模型中添加一个属性,其中只有一个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)

谢谢你。我的目标是将整个解决方案隔离到一个地方。这并不能完全让我达到目的,但我认为这会解决问题!没问题。正如我的回答中提到的,您可能希望为您的案例创建一个特定属性。regularexpression逻辑和修剪逻辑应该起作用。