空白空间的正则表达式验证失败

时间:2016-06-08 13:48:23

标签: regex asp.net-mvc data-annotations

我在数据注释中使用手机验证正则表达式。 电话验证工作正常,但如果我只输入空格,则验证不起作用。

这是我的正则表达式

^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$

2 个答案:

答案 0 :(得分:0)

使用jquery.download的蒙面输入插件,形成nuget.it会更好。这个:

在您看来:

<script type="text/javascript">
  jQuery(function ($) {
    $("#contactNumber").mask("(999) 999-9999");
  });
</script>
<script src="~/Scripts/jquery.maskedinput.js"></script>


@Html.ValidationMessageFor(m => m.ContactNumber)
@Html.LabelFor(m => m.ContactNumber, "Contact Number :", new { style = "display:inline;" })
@Html.TextBox("ContactNumber", Model.ContactNumber, new { id = "contactNumber" })

在模特:

[Required(ErrorMessage = "Number Required")]
[RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Entered phone format is not valid.")]
public string ContactNumber { get; set; }

答案 1 :(得分:0)

要直接回答您的问题,您的正则表达式不会验证空格,因为粗体部分无法匹配空白:

    ^
    \s*
    (?:\+?(\d{1,3}))?
    [-. (]*
    (\d{3})
    [-. )]*
    (\d{3})
    [-. ]*
    (\d{4})
    (?: *x(\d+))?
    \s*
    $

如果你想匹配模式,或者什么都不匹配,你可以做一个简单的修改:

^(?:\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*)?$

然而,在尝试验证国际电话号码的更一般问题上,我同意评论者认为这很难,而且可能是一个不值得解决的问题。您可能只想验证更简单的事情,例如:

  1. 以+开头很好。
  2. 其余部分由数字组成,可能会或可能不会穿插破折号或空格。
  3. 另外,不确定是否要在那里处理扩展(“48204020420 x14”等),但这真的非常复杂。