正则表达式不匹配

时间:2016-09-14 08:52:55

标签: html regex asp.net-mvc

在带有表单的html页面中,我有两个字段:

@Html.TextBoxFor(model => model.HouseNumberSuffix)
@Html.TextBoxFor(model => model.PhoneNumber)

在此页面的模型中,此字段具有以下正则表达式

 [RegularExpression("[A-Za-z0-9]*[0-9]+[A-Za-z0-9]*",
 ErrorMessage = "At least one digit is required for this field")]
  public string HouseNumberSuffix { get; set; }

 [RegularExpression("[0-9]+", ErrorMessage = "Only numbers allowed")]
  public string PhoneNumber { get; set; }

因此,当我尝试提交表单时,上述字段无效,即使我没有在文本框中写任何内容。我想修改正则表达式以接受空字符串。到现在为止我已经尝试过: regex allow only numbers or empty stringRegex, Number or Empty
谢谢!

2 个答案:

答案 0 :(得分:1)

匹配模式的0或1次:

([A-Za-z0-9]*[0-9]+[A-Za-z0-9]*)?

([0-9]+)?

( )用于分组表达式逻辑和 ?代表0或1

答案 1 :(得分:1)

加号至少需要一个字符,因此将其更改为[A-Za-z0-9]*将有助于第一个和[0-9]*。但是,这样,第一个也只允许字母。您可能还希望分别使用^$锚定字符串

<小时/> 正如@Simon指出的那样,这并没有真正回答你的问题,所以对于第一个,下面的表达式将起作用:

(?:(?=^$)|(?=^\D*\d))^\w*$
# either an empty string
# or at least one digit in the lookaheads
# afterwards only digits and letters are allowed

请参阅a demo on regex101.com