使用正则表达式和C#限制电子邮件地址的最大长度

5

我创建了一个用于验证电子邮件地址的正则表达式,这是我的正则表达式:

@"^\w+(\.?[-+\w])*@\w+([-.]\w+)*\.[a-zA-Z]{2,80}$"

我希望邮件地址的最大长度为80,但是使用这个正则表达式我只限制了 . 后面的部分。
aaa@aa.ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff is invalid

但是。
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@aa.ffffffff is valid

我该怎么做呢?


3
不行,正则表达式不是合适的工具。那string.Length呢? - Peter
1
这个验证过程是一个两步骤的过程。第一步是验证格式,第二步是验证长度。对于长度,您可以使用正则表达式,但正如@peer所建议的那样,还有更好的方法。 - Alex Filipovici
你为什么不将它们分开并比较每个字符串的长度呢? - User2012384
我更喜欢仅编辑正则表达式,以避免进行新的构建和部署(正则表达式位于数据库中)。 - user1428798
4
@user1428798 有时候,你需要修改代码;修正:不,让我们诚实些——大多数情况下,你需要修改代码。 - Marc Gravell
3个回答

1
您可以通过两个步骤进行验证。试试看吧。
   Regex validCharsRegex = new Regex(@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*" +
                                                      "@" + @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$");
   Match match = validCharsRegex.Match(stringText.Trim());
   if (match.Success && stringText.Length <=80 )
   {
     // You logic here
   }

1

我不确定是否犯了明显的错误,但我用条件表达式做了一个测试,其中包含两个子句。测试条件是电子邮件格式验证:

(?:^\w+\.?[-+\w]*@\w+(?:[-.]\w+)*\.[a-zA-Z]{2,}$)

如果满足条件,在输入中搜索任何6(最小长度-x@x.xx)到80次重复出现的字符:
^.{6,80}$

如果条件未满足,则再次搜索测试条件中的表达式(不会产生结果):
^\w+\.?[-+\w]*@\w+(?:[-.]\w+)*\.[a-zA-Z]{2,}$

整个正则表达式看起来像这样:

(?(?:^\w+\.?[-+\w]*@\w+(?:[-.]\w+)*\.[a-zA-Z]{2,}$)^.{6,80}$|^\w+\.?[-+\w]*@\w+(?:[-.]\w+)*\.[a-zA-Z]{2,}$)

而且它 看起来 正在工作。


0
你可以使用 String.Length 属性进行验证。如果你想要检查 "@" 字符前后的部分,可以对字符串执行 string.Split 操作,并检查操作结果生成的 2 个字符串的长度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接