メール処理についてtrueまたはfalseのいずれかを返すテストを作成したいと思います。
今のところ、メールアドレスがr +で始まる場合はtrue、それ以外の場合はfalseです。これは、サーバーが攻撃を受けているスパムの多くを無視するのに役立ちます。
例:
[email protected] .. true
[email protected] .. true
[email protected] .. FALSE
Rails/Ruby/regexでこれを処理する最も効率的な方法は何ですか?
ありがとう
[〜#〜]目標[〜#〜]
Rails/Rubyのワンライナーは次のとおりです:
ABORT if XXXXX == 0
これは一致します:
/^r\+.*@site.com$/
例:
>> '[email protected]' =~ /^r\+.*@site.com$/ #=> 0
>> '[email protected]' =~ /^r\+.*@site.com$/ #=> nil
Rubyではnil
またはfalse
以外のすべてが真実であるため、この正規表現を条件で使用できます。ブール値が本当に必要な場合は、!!
イディオムを使用できます。
>> !!('[email protected]' =~ /^r\+.*@site.com$/) #=> false
>> !!('[email protected]' =~ /^r\+.*@site.com$/) #=> true
Railsを使用している場合は、starts_withがありますか?文字列のメソッド:
"foo".starts_with?('f') # => true
"foo".starts_with?('g') # => false
Rails以外では、正規表現は合理的な解決策です。
"foo" =~ /^f/ # => true
"foo" =~ /^g/ # => false
Rubyはifステートメントでトゥルーシネスを使用するため、正規表現を使用することになった場合は、戻り値を使用して次のように切り替えることができます。
if "foo" =~ /^f/
puts "Was true!"
else
puts "Was false!"
end
メソッドを作成していてブール結果を返したい場合は、いつでもダブルバントリックを使用できます。
def valid_email?
!!("foo" =~ /^f/)
end
Rubular(rubular.com)は、1.9より前の正規表現Ruby regexesをテストするのに適したサイトです。(1.9の正規表現は先読みなどを追加しました。)
「!!」を使いたくない場合オペレーター:
!!("foo" =~ /^f/)
三項演算子を使用できます(より明白に見えるかもしれません):
"foo" =~ /^f/ ? true : false
'==='演算子も使用できます
/f/ === 'foo' #=> true
/f/ === 'bat' #=> false
注:正規表現の部分は左側にあります。
/ YOUR_REGEX/=== 'YOUR_STRING'