使用regex + c限制邮件地址的最大长度#

时间:2013-10-30 08:37:50

标签: c# regex

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

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

我希望邮件地址的最大长度为80但是使用此正则表达式我只限制之后的邮件的最后部分。

现在

aaa@aa.ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff is invalid

但是

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@aa.ffffffff is valid

我该怎么做?

3 个答案:

答案 0 :(得分: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 :(得分:1)

不确定我是否犯了一个明显的错误,但我已经使用子句conditional expression进行了测试。测试条件是电子邮件格式验证:

(?:^\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,}$)

似乎正在发挥作用。

答案 2 :(得分:0)

您可以检查String.Lenght属性以进行验证。如果你想检查“@”字符之前和之后的部分,你可以在字符@上做一个string.Split,并检查由操作产生的2字符串的长度