Ruby与正则表达式的电子邮件验证
我有一大堆我正在运行的电子邮件。 很多电子邮件都有错别字。 我正在尝试构建一个字符串来检查有效的电子邮件。
这是我的正则表达式。
def is_a_valid_email?(email)
(email =~ /^(([A-Za-z0-9]*.+*_+)|([A-Za-z0-9]+-+)|([A-Za-z0-9]++)|([A-Za-z0-9]++))*[A-Za-z0-9]+@{1}((w+-+)|(w+.))*w{1,63}.[a-zA-Z]{2,4}$/i)
end
如果电子邮件为下划线且只有一个时段,则通过。 我有很多电子邮件的名称本身有多个时段。 我如何检查正则表达式。
hello.me_1@email.com # <~~ valid
foo.bar#gmail.co.uk # <~~~ not valid
f.o.o.b.a.r@gmail.com # <~~~valid
f...bar@gmail.com # <~~ not valid
get_at_m.e@gmail #<~~ valid
有人可以帮我重写我的正则表达式吗?
TL; DR:
VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-]+(.[a-zd-]+)*.[a-z]+z/i
原始答案
你似乎很复杂的事情,我会简单地使用:
VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-]+(.[a-z]+)*.[a-z]+z/i
这是从迈克尔哈特尔的铁轨书
因为这不符合你的点要求,所以可以这样简单地表示赞赏:
VALID_EMAIL_REGEX = /A([w+-].?)+@[a-zd-]+(.[a-z]+)*.[a-z]+z/i
正如CAustin所提到的,还有很多其他解决方案。
编辑:
@installero指出原始版本的子域连字符失败,这个版本将起作用(不知道为什么字符类首先缺少数字和连字符)。
VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-]+(.[a-zd-]+)*.[a-z]+z/i
这是David Celis撰写的一篇伟大的文章,解释了为什么每个可以用于验证电子邮件地址的正则表达式都是错误的,包括Mike发布的上述内容。
从文章:
本地字符串(@之前的电子邮件地址部分)可以包含以下字符:
`! $ & * - = ` ^ | ~ # % ' + / ? _ { }`
但猜猜怎么了? 如果用引号括起来,你可以使用任何你想要的字符。 例如,“查看所有这些空间!”@ example.com是一个有效的电子邮件地址。 尼斯。
如果你需要做一个基本的检查,最好的正则表达式就是/@/
。
这一个更短,更安全:
/A[^@s]+@[^@s]+z/
常规用于Devise gem。 但是这些值有一些漏洞:
".....@a....",
"david.gilbertson@SOME+THING-ODD!!.com",
"a.b@example,com",
"a.b@example,co.de"
我更喜欢从ruby库URI::MailTo::EMAIL_REGEXP
使用regexp
有一个用于电子邮件验证的宝石
电子邮件验证器
链接地址: http://www.djcxy.com/p/92863.html