DataAnnotations [Phone]属性

use*_*Bee 16 c# regex validation asp.net-mvc data-annotations

[Phone]属性的默认有效格式是什么?在数据表中,电话栏是navrchar(16)如果我输入电话#1112223333,我得到"字段不是有效的电话号码".如果我输入01112223333,我会收到"值'11112223333'无效."

另外,如何覆盖它?我知道我可以做这样的事情,但这是这种情况下的最佳做法吗?

[RegularExpression(@"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}",ErrorMessage="Invalid Phone Number!")]
Run Code Online (Sandbox Code Playgroud)

相关代码:

    [Required]
    [Phone]
    public string Phone { get; set; }

    <div class="editor-field">
       @Html.EditorFor(model => model.Phone)
       @Html.ValidationMessageFor(model => model.Phone)
    </div>
Run Code Online (Sandbox Code Playgroud)

更新 我想当我将手机列从int更改为navrchar时存在映射问题.更新模型是不够的,所以我不得不使用表映射手动更改值.

2019年错误:指定的成员映射无效.'UserDBModel.UserProfile'类型中成员'Phone'的类型'Edm.Int32 [Nullable = False,DefaultValue =]'与'SqlServerCe.nvarchar不兼容[Nullable = False,DefaultValue =,MaxLength = 16,Unicode = True ,"FixedLength = False]'成员'Phone',类型为'UserDBModel.Store.UserProfile'.

Mat*_*ter 14

PhoneAttribute现在可以通过使用.NET Reference Source(.NET Framework 2.7.2)source.dot.net(.NET Core)浏览源代码轻松找到可以使用的默认正则表达式

在那里它显示(丑陋的)正则表达式被定义为:

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);
Run Code Online (Sandbox Code Playgroud)

这回答了你的直接问题,但它是否有帮助还有待观察.也许它是一个很好的基础来创建自己的修改后的电话号码正则表达式.

样本正则表达式匹配


小智 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; }
Run Code Online (Sandbox Code Playgroud)