AnA*_*ice 17 regex ruby-on-rails ruby-on-rails-3
我正在寻找一个正则表达式验证电子邮件,以了解它是否有效..我有以下内容:
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不应该在它应该返回时有效.有关更好的正则表达式的任何想法或建议吗?
谢谢
scr*_*agz 24
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
不要问我解释一下!这是一个验证插件,我已经失去了跟踪,因为我需要的只是电子邮件正则表达式.
Sam*_*ton 12
@ jensgram的答案非常好,但它实际上仍然允许没有域名的电子邮件,例如foo @ bar与foo@bar.com一样有效.
这里有一个细微的变化,需要string@string.string:
/\A\S+@.+\.\S+\z/
或者,更具可读性(尽管不需要括号):
/\A(\S+)@(.+)\.(\S+)\z/
*注意:这个正则表达式比许多更复杂的正则表达式要好,因为允许的电子邮件多么多样化.从技术上讲,如果用引号括起来,电子邮件甚至可以使用空格,例如"这是一封有效的电子邮件"@ email.com
*编辑:我已经更换了^,并$用\A和\z防止轨测试一个多锚错误.
*编辑:感谢@Barry注意到正则表达式允许空格.使用\ S更新了正则表达式以防止使用不正确的空格的电子邮件.仍然允许多个点,因为email@foo.bar.com是可接受的地址.
jen*_*ram 11
我对此的看法(见上面的评论和链接):
^.+@.+$
apa*_*erj 11
没有足够的声誉来添加评论但是如果你打算使用Devise regexp,并且你已经在使用Devise本身,那么你可以简单地使用:
validates :email, presence: true, format: Devise.email_regexp
/\b[A-Z0-9._%a-z\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,4}\z/
这是我用来验证电子邮件的内容.
资料来源:http://www.regular-expressions.info/email.html
小智 5
这些其他答案中的大多数限制性太强,或者允许明显错误的地址.因此,最好放弃过于严格,这会让用户感到沮丧,只是让主要事情变得正确.
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黑名单和确认电子邮件.
对于真正的电子邮件域验证,可以使用此代码:https://gist.github.com/9200104
这匹马现在被彻底殴打,被制成粗磨.
| 归档时间: | 
 | 
| 查看次数: | 52336 次 | 
| 最近记录: |