Ruby on rails 如何在Rails 3.1中验证西里尔字母电子邮件?

Ruby on rails 如何在Rails 3.1中验证西里尔字母电子邮件?,ruby-on-rails,validation,Ruby On Rails,Validation,假设我的电子邮件地址像putin crab@Пззззззззззззз1079 如何在rails 3.1中验证该地址 我的模型(我使用Mongoid): 对于验证请求,我使用gem 在rails控制台中(普通电子邮件): ruby-1.9.2-p290:001>usr=User.new(:email=>)pretty@gmail.com" ) => # ruby-1.9.2-p290:002>usr.valid? =>正确 在rails控制台中(fu#ing email): ruby-1.

假设我的电子邮件地址像putin crab@Пззззззззззззз1079

如何在rails 3.1中验证该地址

我的模型(我使用Mongoid):

对于验证请求,我使用gem

在rails控制台中(普通电子邮件):

ruby-1.9.2-p290:001>usr=User.new(:email=>)pretty@gmail.com" )
=> # 
ruby-1.9.2-p290:002>usr.valid?
=>正确
在rails控制台中(fu#ing email):

ruby-1.9.2-p290:003>usr=User.new(:email=>“putin-crab@Пзззззззззззз
=> # 
ruby-1.9.2-p290:004>usr.valid?
Encoding::CompatibilityError:不兼容的编码regexp匹配(带UTF-8字符串的ASCII-8BIT regexp)
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active\u model/validations/format.rb:9:in`=~'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active\u model/validations/format.rb:9:in`!~'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active\u model/validations/format.rb:9:in'validate\u each'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active\u model/validator.rb:153:in'block in validate'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active_model/validator.rb:150:in'each'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active\u model/validator.rb:150:in'validate'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activesupport-3.1.1/lib/active\u-support/callbacks.rb:302:in`\u-callback\u-before\u 13'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activesupport-3.1.1/lib/active\u-support/callbacks.rb:404:in`_-run\u-validate\u-callbacks'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activesupport-3.1.1/lib/active\u support/callbacks.rb:81:in'run\u callbacks'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:42:in'block in run_callbacks'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:67:in'call'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:67:in'run\u cascading\u callbacks'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:41:in'run\u callbacks'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active\u model/validations.rb:212:in'run\u validations!'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active\u model/validations/callbacks.rb:53:in`block in run\u validations!'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activesupport-3.1.1/lib/active\u support/callbacks.rb:390:在“运行验证\u回调”中
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activesupport-3.1.1/lib/active\u support/callbacks.rb:81:in'run\u callbacks'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:42:in'block in run_callbacks'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:67:in'call'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:67:in'run\u cascading\u callbacks'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:41:in'run\u callbacks'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active\u model/validations/callbacks.rb:53:in'run\u validations!'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active_model/validations.rb:179:in'valid'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/validations.rb:70:in'valid'
来自(irb):4
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/railties-3.1.1/lib/rails/commands/console.rb:45:in'start'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/railties-3.1.1/lib/rails/commands/console.rb:8:in'start'
from/home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/railties-3.1.1/lib/rails/commands.rb:40:in`'
来自脚本/rails:6:in'require'

regexp无法识别电子邮件,因为它们不是有效的电子邮件

在Ruby(和Rails)中验证电子邮件地址有几种好方法,每种方法都有不同的权衡:

  • 如果您只想验证它的格式是否正确,请使用专用的特定解析器,如TMail中的解析器,并查看输入是否被接受(解析成功)(而不是REGEXP)。比如说

  • 一旦知道电子邮件具有正确的格式,您可以更进一步,通过DNS查询“与internet对话”,查看电子邮件的域是否解析并指定了邮件服务器(MX记录),尽管这可能太多了


  • 请在新问题中详细描述您当前的问题,并在此处的链接中留下评论。我相信问题不再是“不兼容的编码regexp匹配(ASCII-8BIT regexp与UTF-8字符串)”,即使您的RFC 822验证器gem没有被“putin-crab@Пззззззззззззззззз。看起来目前允许UTF-8字符的标准是RFC6531,所以如果你想“按部就班”的话,就应该开始寻找这个标准。
    #encoding: utf-8
    class User
      include Mongoid::Document
    
      field :email,    :type => String
      validates :email,    :presence => true, :format => { :with => RFC822::EMAIL }
    end
    
    ruby-1.9.2-p290 :001 > usr = User.new( :email => "pretty@gmail.com" )
     => #<User _id: 4ec627cf4934db7e4d000001, _type: nil, email: "pretty@gmail.com"> 
    ruby-1.9.2-p290 :002 > usr.valid?
     => true 
    
    ruby-1.9.2-p290 :003 > usr = User.new( :email => "putin-crab@президент.рф" )
     => #<User _id: 4ec627f44934db7e4d000002, _type: nil, email: "putin-crab@президент.рф"> 
    ruby-1.9.2-p290 :004 > usr.valid?
    
    Encoding::CompatibilityError: incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active_model/validations/format.rb:9:in `=~'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active_model/validations/format.rb:9:in `!~'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active_model/validations/format.rb:9:in `validate_each'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active_model/validator.rb:153:in `block in validate'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active_model/validator.rb:150:in `each'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active_model/validator.rb:150:in `validate'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activesupport-3.1.1/lib/active_support/callbacks.rb:302:in `_callback_before_13'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activesupport-3.1.1/lib/active_support/callbacks.rb:404:in `_run_validate_callbacks'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activesupport-3.1.1/lib/active_support/callbacks.rb:81:in `run_callbacks'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:42:in `block in run_callbacks'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:67:in `call'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:67:in `run_cascading_callbacks'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:41:in `run_callbacks'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active_model/validations.rb:212:in `run_validations!'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active_model/validations/callbacks.rb:53:in `block in run_validations!'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activesupport-3.1.1/lib/active_support/callbacks.rb:390:in `_run_validation_callbacks'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activesupport-3.1.1/lib/active_support/callbacks.rb:81:in `run_callbacks'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:42:in `block in run_callbacks'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:67:in `call'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:67:in `run_cascading_callbacks'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/callbacks.rb:41:in `run_callbacks'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active_model/validations/callbacks.rb:53:in `run_validations!'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/activemodel-3.1.1/lib/active_model/validations.rb:179:in `valid?'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/mongoid-2.3.3/lib/mongoid/validations.rb:70:in `valid?'
        from (irb):4
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/railties-3.1.1/lib/rails/commands/console.rb:45:in `start'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/railties-3.1.1/lib/rails/commands/console.rb:8:in `start'
        from /home/username/.rvm/gems/ruby-1.9.2-p290@rail31/gems/railties-3.1.1/lib/rails/commands.rb:40:in `<top (required)>'
        from script/rails:6:in `require'