Csharp/C#教程:任何人都可以告诉我为什么这个C#电子邮件validation正则表达式(正则表达式)挂起?分享


任何人都可以告诉我为什么这个C#电子邮件validation正则表达式(正则表达式)挂起?

我有一个很好的电子邮件vaidation正则表达式: 电子邮件正则表达式

public static void Main(string[] args) { string value = @"cvcvcvcvvcvvcvcvcvcvcvvcvcvcvcvcvvccvcvcvc"; var regex = new Regex( @"^([0-9a-zA-Z]([-.w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-w]*[0-9a-zA-Z].)+[a-zA-Z]{2,9})$", RegexOptions.Compiled); var x = regex.Match(value); // Hangs here !?! return; } 

它适用于大多数情况,但上面的代码挂起,燃烧100%CPU …我已经在W8 metro应用程序中测试过。 以及标准的.Net 4.5应用程序。

任何人都可以告诉我为什么会发生这种情况,如果有一个好的电子邮件validationREGEX没有挂起,或者有没有办法解决这个问题?

非常感谢,乔恩

解释它为什么会挂起: 灾难性的回溯 。

让我们简化正则表达式的关键部分:

 (w*[0-9a-zA-Z])*@ 

你有

这意味着,给定s = "cvcvcvcvvcvvcvcvcvcvcvvcvcvcvcvcvvccvcvcvc"找不到@

由于您无法使用任何正则表达式validation电子邮件地址(规范中存在太多极端情况),因此通常最好

为了完整起见,您可以在primefaces组的帮助下避免回溯问题:

 var regex = new Regex( @"^([0-9a-zA-Z](?>[-.w]*[0-9a-zA-Z])*@(?>[0-9a-zA-Z][-w]*[0-9a-zA-Z].)+[a-zA-Z]{2,9})$", RegexOptions.Compiled); 

永远不要使用regexvalidation电子邮件..

您可以使用MailAddress类来validation它

 try { address = new MailAddress(address).Address; //address is valid } catch(FormatException) { //address is invalid } 

猜测是因为正则表达式中的[ – 。 w],试着用这个:

 ^[a-zA-Z0-9_-]+(?:.[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})(]?)$ 

此外,在.net 4.5中,EmailAttribute应该可用,但不确定

上述就是C#学习教程:任何人都可以告诉我为什么这个C#电子邮件validation正则表达式(正则表达式)挂起?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/997078.html

(0)
上一篇 2021年12月25日
下一篇 2021年12月25日

精彩推荐