2016-11-02 8 views
2

私はこの正規表現/\A[\w+\-.][email protected][a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]{2,}\z/を与えていましたが、電子メールアドレスの正当性を検証するために使用します。Ruby Regexの一致方法

これは私の最初のRubyコードであり、その方法はわかりません。私は.matchメソッドを使用するように言われました。これはMatchDataオブジェクトを返します。しかし、MatchDataオブジェクトが妥当性を確認したことを確認するにはどうすればよいですか?

私は以下を使ってみましたが、電子メールアドレスでなくても、どんな文字列も受け入れているようです。

#Register new handler 
def register_handler 

    email_regex = /\A[\w+\-.][email protected][a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]{2,}\z/ 
    email = "invalid" 
    unless email =~ email_regex then 
     puts("Insert your e-mail address:") 
     email = gets 
    end 

    puts("email received") 


end 

これを行う正しい方法は何ですか? .matchまたは上記の方法を使用してください。

答えて

3

をキャプチャするために正規表現は、電子メールアドレスと一致します。

'invalid' =~ email_regex 
=> nil # which boolean value is false 

'[email protected]' =~ email_regex 
=> 0 # which boolean value is true 

ただし、

"[email protected]\n" =~ email_regex 
=> nil 

改行文字\nにはすべての入力にgetsが追加されます。

これは、端末に入力する内容に関係なく、untilループが永遠に実行される理由です。改行文字のため、一致する結果は常にnilになります。

gets.chompを試してください。改行文字がトリミングされ、コードが機能するはずです。