一个 email 正则,在 ruby 2.2 , 2.4 测试都有问题?
# 正常 "[email protected]" =~ /\A([\w+\-].?)+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i # 阻塞不返回 "[email protected]" =~ /\A([\w+\-].?)+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
这种情况要怎么调试?
只用一个正则匹配看上去太费劲了。就算你能写出规则正确且运行效率高的正则,代码也很难阅读。
还不如用 .split("@") 拆分成两段,域名部分也 .split(".")拆分开来,各段分别写验证规则的时候再用正则也行。
.split("@")
.split(".")
应该是ReDos了
主要提取 email 地址,比如 email from 地址为 < <[email protected]>> ,业务需要把 [email protected]提取出来. 拆分也行,但是最后还是得用正则。
< <[email protected]>>
[email protected]
谢谢 hooopo 大神了,又介绍了新的东西。
经测试,换了个正则可以了
/\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
把 @ 前面的 .? 去掉了,貌似就没有问题了
.?