20

[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:指定的成员映射无效。'UserDBModel.UserProfile' 类型的成员 'Phone' 的类型 'Edm.Int32[Nullable=False,DefaultValue=]' 与 'SqlServerCe.nvarchar[Nullable=False,DefaultValue=,MaxLength=16,Unicode=True 不兼容'UserDBModel.Store.UserProfile' 类型中成员 'Phone' 的 ,FixedLength=False]'。

4

2 回答 2

18

现在可以通过使用.NET 参考源( .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);

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

正则表达式匹配示例

于 2014-03-01T08:15:39.847 回答
11

尝试这个 -

  [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; }
于 2014-09-11T06:09:12.300 回答