Asp.net 具有字符限制的电子邮件验证

Asp.net 具有字符限制的电子邮件验证,asp.net,regex,validation,Asp.net,Regex,Validation,我已经为ASP.NET创建了一个限制为100个字符的电子邮件验证程序。这一切都很好,然后我做了刷新大约20分钟后,我得到以下错误 按相反顺序分析“[\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)]{0100}”-[x-y]范围。描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。异常详细信息:System.ArgumentException:按相反顺序分析“[\w+([-+.]\w+)@\w+([-.]\w+

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

按相反顺序分析“[\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)]{0100}”-[x-y]范围。描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。异常详细信息:System.ArgumentException:按相反顺序分析“[\w+([-+.]\w+)@\w+([-.]\w+)。\w+([-.]\w+){0100}”-[x-y]范围

所以我的代码是


谁能告诉我什么突然出了问题?我没有改变任何东西。

正则表达式一开始可能不起作用——它可能是无效的,而且肯定没有达到您期望的效果

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

也就是说,您的正则表达式匹配0到100个
\w
+
*
,…等等)

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

您的正则表达式有
[-+
[-.
,都在
[[{0100}
中。因此,您试图说“匹配
[
+
之间的所有字符”。这是由unicode字符定义的。左方括号
[
有unicode 91,而
+
是unicode 43

您收到的错误消息是因为您试图选择unicode点91和43之间的所有字符,这是从后向前的

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

\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
要在正则表达式中强制执行100个字符的限制,必须使用前瞻:

^(?=.{0,100}$)\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
^(?=.{0100}$)
确保字符串中最多有100个字符。如果这是真的,则剩余的正则表达式将继续验证它