Tes*_*act 7 regex email-validation
这是验证电子邮件的正则表达式 - \S+@\S+\.\S+我没有写它.我是正则表达式的新手,并不能很好地理解它们.
我有一些问题:
我只是回答你的第一个问题,从技术正则表达的角度来看.
正则表达式有什么问题\S+@\S+\.\S+,它有可能执行得太慢.如果有人输入如下所示的电子邮件字符串,您需要验证它会发生什么?
a@b.cdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789
或者更糟糕的是(是的,这是点后的100 @):
@.@@@@@@@@@@@@@@@@@@@@@@@@@\@@@@@@@@@@@@@@@@@@@@@@ @@@\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@
缓慢发生.首先,正则表达式会贪婪地匹配第一个尽可能多的字符\S+.因此,它最初将匹配整个字符串.然后我们需要@字符,所以它会回溯直到找到一个.那时我们还有另一个\S+,所以,它会消耗所有东西,直到字符串结束.然后它需要再次回溯直到找到一个点.你能想象在正则表达式最终在第二个电子邮件字符串上失败之前会发生多少回溯吗?
为了消除回溯,我建议在这种情况下使用所有格字符类,这样做的另一个好处是不允许在一个字符串中使用多个@.
[^@\s]++@[^@\s.]++\.[^@\s]++
我针对"100 @的电子邮件"对两个正则表达做了快速基准测试.我的速度快了约95倍.
| 归档时间: |
|
| 查看次数: |
2230 次 |
| 最近记录: |