Html 正则表达式不匹配
在带有表单的html页面中,我有两个字段:Html 正则表达式不匹配,html,regex,asp.net-mvc,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
@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; }
所以当我试图提交表单时,上面的字段是无效的,即使我没有在它们的文本框中写任何东西。我想修改正则表达式以接受空字符串。到目前为止,我一直在尝试:
,
谢谢 匹配模式的0或1倍:
([A-Za-z0-9]*[0-9]+[A-Za-z0-9]*)?
([0-9]+)?
()
用于对表达式逻辑和
?
对于0或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-Za-z0-9]*
将有助于第一个字符,而[0-9]*
将有助于第二个字符。然而,这样一来,第一个也只允许字母。您可能还希望分别使用^
和$
锚定字符串。@Jan为什么不将此作为答案编写;如果我在写一篇文章,我会这么说answer@SpoonMeiser:完成。这样做会丢失“此字段至少需要一位数字”的条件。[A-Za-z0-9]*匹配“”(无)但也匹配“abc”(无数字)@SimonPA:这正是我的答案中所写的内容:然而,这样一来,第一个也只允许字母。