是否有可能同时验证所提供的数据是否为电话号码并将其减少到验证器中的数字?
输入:(902)837-2832
输出有效:是,9028372832
或者我必须在事后将输入转换为仅数字格式吗?
答案 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)