我有一大堆正在浏览的邮箱.很多邮件都有打字错误.我正在try 建立一个字符串来判断有效的邮箱.

这是我为regex准备的.

def is_a_valid_email?(email)
  (email =~ /^(([A-Za-z0-9]*\.+*_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\+)|([A-Za-z0-9]+\+))*[A-Z‌​a-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;博士:

归功于@joshuahunter(下面是他的答案).包括在这里,让人们看到它.

URI::MailTo::EMAIL_REGEXP

老TL;博士

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

原始答案

你似乎把事情复杂化了很多,我只想用:

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

这是从michael hartl's rails book开始的

由于这不符合您的dot要求,因此可以简单地如下所示:

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

正如CAustin所提到的,还有很多其他的解决方案.

编辑:

@installero指出,对于包含连字符的子域,原始版本失败,此版本将起作用(不确定为什么字符类首先缺少数字和连字符).

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

Ruby相关问答推荐

如何使用Ruby range?

使用 RSpec 测试嵌套哈希时随机排序数组的匹配

有没有更好的方法来加入剩余不变的子列表?

为什么数组中的 splat 如此昂贵?

如何返回此 OOP Ruby 代码最后一行中的变量?

删除带括号的子表达式

Ruby open-uri 重定向被禁止

你如何称呼 Ruby 中的 &: 运算符?

如何从 url 获取文件扩展名?

RSpec 是否有可能期望在两个表中发生变化?

group_by 在 rails by 2 或更多属性

与 String 相比,在 Ruby 中使用 StringIO 有哪些优势?

Ruby 将标题发布到 slug

对哈希中数组的值求和

将 CSV 文件转换为哈希数组

在类方法中使用实例变量 - Ruby

Ruby 实例变量何时设置?

您的 Ruby 版本是 2.0.0,但您的 Gemfile 指定了 2.1.0

如何删除已安装的 ri 和 rdoc?

如何解决/usr/bin/env: ruby​​_executable_hooks: No such file or directory?