2012-03-20 80 views
0

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

解析 “[\ W +([ - +] \ W +)@ \ W +([ - ] \ W +) \ W +([ - ] \ W +)。] {0100}” - [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

正则表达式可能不会起作用 - 它可能是无效的,当然不会做你期望的。

通过在字符类[ ]{1,100}整个正则表达式,内一切该字符类不被解释为一个正则表达式,而是作为一个字符类的内容。

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

误差来自连字符之内:如果我做一个正则表达式[a-z],它的意思是“匹配a和z之间的所有字符(包含)“。

你的正则表达式有[-+[-.,内[]{0,100}所有。所以,你想说“匹配[+之间的所有字符”。这是由unicode字符定义的。左括号[拥有unicode的91,而+是unicode 43

你所得到的错误消息,是因为你想选择Unicode点91和43,这是从后往前之间的所有字符。

无论如何,要修复您的正则表达式,请将其从[]中取出。

\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 

强制执行正则表达式的100个字符的限制,你必须使用一个前瞻:

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

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

+0

谢谢堆!有用。 :) – dpDesignz 2012-03-20 04:11:13