rails – 用于电子邮件validation的REGEX

我正在寻找一个正则表达式validation电子邮件,以了解它是否有效..我有以下内容:

def is_a_valid_email?(email) email_regex = %r{ ^ # Start of string [0-9a-z] # First character [0-9a-z.+]+ # Middle characters [0-9a-z] # Last character @ # Separating @ character [0-9a-z] # Domain name begin [0-9a-z.-]+ # Domain name middle [0-9a-z] # Domain name end $ # End of string }xi # Case insensitive (email =~ email_regex) end 

以上问题是XXX_XXX@Xxx.com在应该的时候没有返回有效。 有关更好的正则表达式的任何想法或建议吗?

谢谢

我的镜头(见上面的评论和链接):

 ^.+@.+$ 
 validates_format_of :email, :with => /^(|(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6})$/i 

不要问我解释一下! 这是一个validation插件,我已经失去了跟踪,因为我需要的只是电子邮件正则表达式。

@ jensgram的答案非常好,但它实际上仍允许没有域名的电子邮件,例如foo @ bar与foo@bar.com一样有效。

这里有一个细微的变化,需要string@string.string:

/\A\S+@.+\.\S+\z/

或者,更具可读性(尽管不需要括号):

/\A(\S+)@(.+)\.(\S+)\z/

玩弄这个

*注意:这个正则表达式比许多更复杂的正则表达式更好,因为允许的电子邮件多么多样化。 从技术上讲,如果用引号括起来,电子邮件甚至可以使用空格,例如“这是一封有效的电子邮件”@ email.com

*编辑:我已经用\A\z替换了^$ ,以防止在rails测试中出现多行锚点错误。

*编辑:感谢@Barry注意到正则表达式允许空格。 使用\ S更新了正则表达式以防止使用不正确的空格的电子邮件。 仍然允许多个点,因为email@foo.bar.com是可接受的地址。

 /\b[A-Z0-9._%az\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,4}\z/ 

这是我用来validation电子邮件的方法。

资料来源: http : //www.regular-expressions.info/email.html

没有足够的声誉来添加评论但是如果你打算使用Devise regexp,并且你已经在使用Devise本身,那么你可以简单地使用:

validates :email, presence: true, format: Devise.email_regexp

这些其他答案中的大多数限制性太强,或者允许明显错误的地址。 因此,最好放弃过于严格,这会让用户感到沮丧,只是让主要事情变得正确。

1.最常见的用例:

  validates :email, ..., format: { with: /\A[^@\s]+@([^@.\s]+\.)+[^@.\s]+\z/ } 

2.要允许root@localhosthomer@blinky ,请使用:

  validates :email, ..., format: { with: /\A[^@\s]+@([^@.\s]+\.)*[^@.\s]+\z/ } 

以上都不代替寻找CAPTCHA,DNS记录,DNS域名黑名单,IP黑名单和确认电子邮件。

对于真正的电子邮件域validation,可以使用此代码: https : //gist.github.com/9200104

这匹马现在被彻底殴打,并被制成粗磨。

这是我一直在使用的电子邮件正则表达式:

 \b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[AZ]{2,4}\b 

它来自这里

^.+@[\w]+\S[^\s]+$

第一个答案的短暂改进

使用: /\A[^@\s]+@[^@\s]+\z/

它断言localpart或域中没有@符号或空格,并且有一个@符号分隔localpart和域。

更重要的是: 要求电子邮件validation

随着更多的tld被创建,这是前瞻性思维。

这来自Devise ,一种认证的行业标准。

对于电子邮件validation,我想出了这个正则表达式,

 /^[\w\d]+@[\w\d]+(\.[\w\d]+)+$/ 

不知道它对你有多大帮助,但对我来说工作正常。

如果有人发现它没有任何电子邮件地址,请回复我,以便我能够更多地工作。

在非英语语言环境中,您可能需要validation带有重音(unicode)字符的电子邮件,例如čšēīū等。

此方法检查返回的nil作为此类语言环境中电子邮件validation失败的标志:

 def validate_unicode_email email /\A[\w\u00C0-\u017F\-]+(\.[\w\u00C0-\u017F\-]+)?@[\w\u00C0-\u017F\-]+\.[\w]{2,6}$/.match email end 

这将通过电子邮件,如name.surname@gmail.com āpsis@mājās.lvtest_email@test_domain.org name.surname@gmail.com āpsis@mājās.lvtest_email@test_domain.org

这是我们使用的。

我们假设它是“某事”@“某事”。 “某事”(2-4个字符)。 它应该涵盖任何“常规”电子邮件。

 /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/ 
 validates_format_of :email, :with => /\A[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]+\z/i