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@localhost
或homer@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.lv
, test_email@test_domain.org
name.surname@gmail.com
āpsis@mājās.lv
, test_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