2016-04-23 6 views
1

Rails 4アプリでregexを使って電子メールの検証を行うことができないようです。RegexがRails 4のアプリケーションで正しく検証されていない

Subscriber.rb

どんなに私の正規表現は、私は、「メールが無効です」というメッセージを取得するには、どのように簡単な
class Subscriber < ActiveRecord::Base 

    validates_uniqueness_of :email, :case_sensitive => false, message: "You're already subscribed!" 
    validates_format_of :email, :with => /@/i, message: "Email is invalid" 
    before_save { self.email = email.downcase if email} 

end 

私は何か明らかに間違っている(正規表現は私にとっては強い訴訟ではありません)。

ありがとうございます!部分を呼び出す

_subscribe.html.erb

<%= form_for Subscriber.new do |f| %> 
    <%= f.text_field :email, :class => "uppercase", :placeholder => "Stay in touch. Enter your email" %> 
    <%= f.submit :class => "submit uppercase", :value => 'submit' %> 
<% end %> 

ライン: <%= render :partial => 'shared/subscribe', :subscriber => Subscriber.new %>

subscribers_controller.rb

include SubscribersHelper 

def create 
    @subscriber = Subscriber.new 
    if @subscriber.save(subscriber_params) 
     redirect_to(:back) 
     flash.notice = "You are now subscribed" 
    else 
     redirect_to(:back) 
     flash.alert = "There was an error with your subscription: " 
     flash.alert += @subscriber.errors.messages.values.join(", ") 
    end 
end 

SubscribersHelper.rb

def subscriber_params 
    params.require(:subscriber).permit(:email) 
end 
+0

'@'が含まれているものがあれば、正規表現では '@ 'のない文字列で試してみると無効と表示されます – rock321987

+0

正規表現を' /.* @。*/' - ' validates'は正規表現が文字列全体と一致することを期待しているかもしれません。 – javanut13

+0

@ rock321987 - @が含まれていない文字列で試しても動作しませんでした。 –

答えて

0
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    validates :email, presence: true, length: { maximum: 255 }, 
        format: { with: VALID_EMAIL_REGEX }, 
        uniqueness: { case_sensitive: false } 

上記はかなりフェイルセーフの電子メールRegExです。

+0

これはもっと深刻な問題を意味するかもしれません:Gmailの電子メールを使ってその正規表現を使用すると、 '空白にすることはできません、無効です'と表示されます。 「存在:真」の部分を削除すると、「無効です」というエラーが表示されます。他のstackoverflowの質問を見て、私はコンソールから加入者を作成しようとしたが、それはエラーなしで成功した。何か案は? –

+0

これをフォームでテストしていますか?あなたはサブを作成するために何を使用していますか? –

+0

はい。これは、サイトのほとんどのページでレンダリングされる部分です。すべてのコードを上に掲載します –

関連する問題