Ruby 为什么这个正则在某些情况下,直接阻塞不返回了?

cxh116 · 2017年09月08日 · 最后由 cxh116 回复于 2017年09月08日 · 1344 次阅读

一个 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(".")拆分开来,各段分别写验证规则的时候再用正则也行。

5long 回复

主要提取 email 地址,比如 email from 地址为 < <[email protected]>> ,业务需要把 [email protected]提取出来. 拆分也行,但是最后还是得用正则。

hooopo 回复

谢谢 hooopo 大神了,又介绍了新的东西。

经测试,换了个正则可以了

/\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i

把 @ 前面的 .? 去掉了,貌似就没有问题了

cxh116 关闭了讨论。 09月08日 12:55
需要 登录 后方可回复, 如果你还没有账号请 注册新账号