DataAnnotations [Phone] 属性
Posted
技术标签:
【中文标题】DataAnnotations [Phone] 属性【英文标题】:The DataAnnotations [Phone] Attribute 【发布时间】:2013-11-04 21:13:16 【问题描述】:[Phone] 属性的默认有效格式是什么? 数据表中phone列是navrchar(16) 如果我输入电话号码,例如 1112223333,我会得到“字段不是有效的电话号码”。 如果我输入 01112223333,我会得到“值 '11112223333' 无效。”
另外,如何覆盖它? 我知道我可以这样做,但在这种情况下这是最佳做法吗?
[RegularExpression(@"((\(\d3\) ?)|(\d3-))?\d3-\d4",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[Nullable=False,DefaultValue=,MaxLength=16,Unicode=True,FixedLength=False]' 'UserDBModel.Store.UserProfile' 类型的成员'Phone'。
【问题讨论】:
这是一个很好的做法。如果您需要多次使用电话验证,最好创建自己的 ValidationAttribute (PhoneNumberAttribute)。 您将数据库中的列更改为“nvarchar”,但将Phone
属性保留在UserDBModel.UserProfile
和int
中
【参考方案1】:
现在可以通过.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);
这回答了你的直接问题,但它是否有帮助还有待观察。也许创建您自己的修改后的电话号码正则表达式会是一个很好的基础。
【讨论】:
该正则表达式的样本编号是多少?我无法从正则表达式重新创建它。 小心正则表达式。并非所有浏览器都支持表达式中的负面外观,尤其是 IE【参考方案2】:试试这个 -
[Required(ErrorMessage = "Mobile no. is required")]
[RegularExpression("^(?!0+$)(\\+\\d1,3[- ]?)?(?!0+$)\\d10,15$", ErrorMessage = "Please enter valid phone no.")]
public string Phone get; set;
【讨论】:
以上是关于DataAnnotations [Phone] 属性的主要内容,如果未能解决你的问题,请参考以下文章
如果我使用 jQuery 验证,是不是必须使用 DataAnnotations?
使用 Validator 类验证 DataAnnotations