[Phone]属性的默认有效格式是什么? 在数据表中,电话列是navrchar(16) 如果我输入电话#1112223333,我会收到“字段不是有效的电话号码”。 如果我输入01112223333,我会收到“值'11112223333'无效。”
另外,如何覆盖它? 我知道我可以做这样的事情,但这是这种情况下的最佳做法吗?
[RegularExpression(@"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}",ErrorMessage="Invalid Phone Number!")]
相关代码:
[Required]
[Phone]
public string Phone { get; set; }
<div class="editor-field">
@Html.EditorFor(model => model.Phone)
@Html.ValidationMessageFor(model => model.Phone)
</div>
更新 当我将手机列从int更改为navrchar时,我想有一个映射问题。更新模型是不够的,所以我不得不使用表映射手动更改值。
错误2019:指定的成员映射无效。 成员'Phone'的类型'Edm.Int32 [Nullable = False,DefaultValue =]' 类型'UserDBModel.UserProfile'与。不兼容 'SqlServerCe.nvarchar [可空=假,默认值=,的MaxLength = 16,的Unicode =真,定长=假]' 成员'Phone'的类型'UserDBModel.Store.UserProfile'。
答案 0 :(得分:13)
现在可以通过使用.NET Reference Source (.NET Framework 2.7.2)或source.dot.net (.NET Core)浏览源代码轻松找到PhoneAttribute
的默认正则表达式
它显示(丑陋的)正则表达式被定义为:
private static Regex _regex = new Regex(@"^(\+\s?)?((?<!\+.*)\(\+?\d+([\s\-\.]?\d+)?\)|\d+)([\s\-\.]?(\(\d+([\s\-\.]?\d+)?\)|\d+))*(\s?(x|ext\.?)\s?\d+)?$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);
这回答了你的直接问题,但是否有帮助还有待观察。也许它是一个很好的基础来创建自己修改的电话号码正则表达式。
答案 1 :(得分:8)
试试这个 -
[Required(ErrorMessage = "Mobile no. is required")]
[RegularExpression("^(?!0+$)(\\+\\d{1,3}[- ]?)?(?!0+$)\\d{10,15}$", ErrorMessage = "Please enter valid phone no.")]
public string Phone { get; set; }