私はRuby on Rails 3とMYSQLデータベースを使用しています。私は、データベースから正規表現を取得し、電子メールアドレスを検証するためにその値を使用したいと思います。Ruby on Railsを使用して電子メールアドレスを検証するためにMYSQLデータベースからRegexを取得
私は、私のRoRアプリケーションコードでは正規表現の値を一行に入れないことを目指していますが、他の用途や他の場所から呼び出すことができます。
Parameter.find_or_create(
:param_name => 'email_regex',
:param_value => "[a-z0-9!#\$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#\$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?",
)
お知らせ: 'seed.rb' ファイルに私が編集したデータベースを作成するために
は、私は私の 'RAILS_ROOT/DB/seed.rb' は以下に置きます少し元の正規表現www.regular-expressions.infoから\
の直前に$
の2つを加えます。ここではそれが違いです:
#original from www.regular-expressions.info
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
#edited by me
[a-z0-9!#\$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#\$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
実行rake db:seed
後、ターミナルで、MYSQLデータベースに私は($
近く\
なしを)この値を持っている:
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
その後、私は使用して私のRoRのアプリケーションで正規表現は次のようになります:
def validate(string)
email_regex = Regexp.new(Parameter.find_by_param_name('email_regex').param_value)
if email_regex.match(string)
return true
else
return false
end
end
probl上記の正規表現を使用してEMは、私が正常に「@」ダブルまたはこれらのような最後の部分なしにもメールアドレスを検証することができるということです。
[email protected]@gmail.com # Note the double '@'
[email protected]
もちろん、私はそれらの電子メールアドレスを拒否したいと思います。だから、どうすれば調整できますか?または、私は何をしたいのですか?
私は、これらの正規表現をシードすることも試してみました:
#case 1
A[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?Z
#case 2
\A[a-z0-9!#\$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#\$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\Z
#case 3
^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$
だけでなく、予想通り、それらは動作しません:MySQLデータベースにそれぞれなっていること
#case 1
\A[a-z0-9!#\$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#\$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\Z
#case 2
\\A[a-z0-9!#\$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#\$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\Z
#case 3
^[a-z0-9!#\$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#\$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$
。
UPDATE
デバッグ私はちょうどすべての/
文字の前に、Rubyは\
文字を追加したことを意味し
--- !ruby/regexp /[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/
を持っています。それは私の問題だろうか? 'seed.rb'ファイルでは、すべて/
\
文を追加してエスケープしようとしましたが、デバッグ出力は常に同じです。
電子メールの検証にemail_regexを使用しています。申し訳ありませんが、それはホイールを再発明しています。 – btilly
私はそれが正しい理由で必要です。 – user502052