美国电话号码(000)-000-0000或000-000-0000的MVC验证

时间:2012-03-23 13:50:27

标签: jquery asp.net-mvc asp.net-mvc-3 html5 c#-4.0

如何为电话号码验证注释电话号码数据注释?

有没有办法在前端允许这种格式,就像使用HTML5模式一样?我知道HTML5和MVC3中都有电话号码的数据类型,但是想知道我们是否可以格式化(000)-000-0000或000-000-0000之类的内容,这样用户就无法输入超过10位的数字,如果他输入了一个以上述格式显示的手机。到目前为止我试过这个:

    [Required]
    [DataType(DataType.PhoneNumber)]
    [RegularExpression(@"^(\d{10})$", ErrorMessage = "Please enter proper phone number.")]
    [Display(Name = "phone")]
    public string Phone { get; set; }

4 个答案:

答案 0 :(得分:10)

我正在研究同样的事情。这就是我最终的结果:

[Required]
[DataType(DataType.PhoneNumber)]
[Display(Name = "Phone number")]
[RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Not a valid number")]
public string PhoneNumber { get; set; }

这将寻找3个数字; (它们周围可能有括号),可能有短划线,句号或空格;然后是3个数字,可能是短划线,句号或空格;然后4个数字。

我从这里拼凑了它:http://blog.stevenlevithan.com/archives/validate-phone-number

答案 1 :(得分:2)

您可能对jQuery掩码插件感兴趣。

http://digitalbush.com/projects/masked-input-plugin/

或者您可以在电话号码输入上设置.blur,如果有10位数字,则会格式化用户的输入。例如:

$("#PhoneNumber").blur(function (event) {
    var phoneNumber = $(this).val();
    // replace all non-numeric characters in phoneNumber
    // do regex check on remaining digits to ensure there are 10 digits
    // if regex passes, format phoneNumber however you like
    %(this).val(phoneNumber);
});

但是,在第二种情况下,您必须更改正则表达式数据注释,因为以这种方式格式化电话号码将始终无法通过当前的正则表达式检查。无论您希望用户提交电话号码的格式应该是此正则表达式验证的格式。

答案 2 :(得分:2)

我有相同的情况,但是当我开始输入电话号码时,我可以通过以下代码片段/更改强制按照要求更改格式,从而实现上述格式:(111) 111-1111

  1. phone mask script file
  2. 下载脚本文件
  3. 标记jscript函数ex:

    @Html.TextBoxFor(m => m.DayPhone, new { @class = "form_input",
                       onkeydown = "javascript:backspacerDOWN(this,event);",
                       onkeyup = "javascript:backspacerUP(this,event);" })
    

    用你的剃刀语法或方便的asp.net html格式。

  4. 希望能帮到你!!!

答案 3 :(得分:0)

如果我理解你的问题,你可以使用RegularExpressionAttribute,然后通过jquery不显眼的验证让你的客户验证你的输入