我为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=" <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>
任何人都可以告诉我突然出了什么问题吗?我没有改变任何事情。
答案 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个字符。如果这是真的,那么正则表达式的其余部分将继续验证它。