修改正则表达式以不检查长度

时间:2015-04-22 11:34:29

标签: c# regex

@"^([a-zA-Z0-9_\-\.\']+)@((\[[0-9]{1,3}" +

              @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +

              @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";

上面的正则表达式用于C#.net站点以验证电子邮件地址。它将域后面的内容限制为字符A-Z,长度可以是2到4个字母。

microsoft.co.uk传递

microsoft.com传递

microsoft.co.fred传递

microsoft.co.freda失败

我需要更改表达式,以便在域之后允许任何长度字符串。

但如果我将第三行更改为:

@".)+))([a-zA-Z]|[0-9])(\]?)$";

我原本以为会删除长度限制。但事实并非如此。它使.com和.co.uk地址失败。

如何更改表达式以允许:

Jim@somecompany.longwordhere

Jim@somecompany.longwordhere.longwordhere

对'longwordhere'的长度没有限制,并且它可以是字母或数字吗?

1 个答案:

答案 0 :(得分:1)

我会使用这个,更简洁的第3行替换,也将使用*量词删除长度限制完全

@".)+))([a-zA-Z0-9]*)(\]?)$";

现在可以是0 or more个字符。 +至少需要1。 我们可以安全地使用*,因为您有$字符串结束所需的锚点。

我也只使用[a-z]Ignorecase选项,但这是一个品味问题。