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

cxh116 · September 08, 2017 · Last by cxh116 replied at September 08, 2017 · 1340 hits

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

Reply to 5long

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

Reply to hooopo

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

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

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

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

cxh116 closed this topic. 08 Sep 12:55
You need to Sign in before reply, if you don't have an account, please Sign up first.