带字符限制的电子邮件验证

时间:2012-03-20 03:27:46

标签: asp.net regex validation

我为ASP.NET创建了一个100字符限制的电子邮件验证程序。这一切都运行良好,然后我做了20分钟后刷新,我得到以下错误。

  

解析“[\ w +([ - +。] \ w +) @ \ w +([ - 。] \ w +)。\ w +([ - 。] \ w +)] {0,100}“ - [xy]以相反的顺序排列。描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.ArgumentException:解析“[\ w +([ - +。] \ w +) @ \ w +([ - 。] \ w +)。\ w +([ - 。] \ w +) ] {0,100}“ - [xy]以相反的顺序排列。

所以我的代码是<asp:RegularExpressionValidator ID="emailReg" runat="server" ControlToValidate="email" ValidationExpression="[\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*]{0,100}" Text="&nbsp;<img src='err.png' alt='*' title='Please enter a valid email address less than 100 characters long'>" ErrorMessage="Please enter a valid email address less than 100 characters long"></asp:RegularExpressionValidator>

任何人都可以告诉我突然出了什么问题吗?我没有改变任何事情。

1 个答案:

答案 0 :(得分:1)

正则表达式可能不会起作用 - 它可能无效,当然也没有按照您的预期进行。

通过将整个正则表达式包含在字符类[ ]{1,100}中, 中的所有该字符类不会被解释为正则表达式,而是被解释为字符类的内容。

也就是说,您的正则表达式匹配\w+*(,...等的0到100。

错误来自以下连字符:如果我使用正则表达式[a-z],则表示“匹配a和z之间的所有字符(包括)”。

您的正则表达式有[-+[-.,所有都在 []{0,100}内。所以,您试图说“匹配[+之间的所有字符”。这由unicode字符定义。左方括号[包含unicode 91,而+为unicode 43。

您收到的错误消息是因为您尝试选择unicode点91和43之间的所有字符,这些字符位于前面。

无论如何,要修复你的正则表达式,请将其从[]

中删除
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

要在regex中强制执行100个字符的限制,您必须使用前瞻:

^(?=.{0,100}$)\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

^(?=.{0,100}$)确保字符串中最多包含100个字符。如果这是真的,那么正则表达式的其余部分将继续验证它。