2016-11-02 3 views
2

Ich gab diese Regex /\A[\w+\-.][email protected][a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]{2,}\z/ und ich bin es, um die Gültigkeit einer E-Mail-Adresse zu überprüfen.Ruby Regex-Match-Methode

Dies ist mein erster Ruby-Code und ich bin nicht sicher, wie es geht. Ich wurde aufgefordert, die .match Methode zu verwenden, die MatchData Objekt zurückgibt. Aber wie überprüfe ich weiterhin, ob das Objekt MatchData die Gültigkeit bestätigt?

Ich habe versucht, Folgendes zu verwenden, aber es scheint, dass es keine Zeichenfolge akzeptiert, auch keine E-Mail-Adresse.

#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 

Was ist der richtige Weg, dies zu tun? Entweder mit .match oder die Methode, die ich oben versuchte.

Antwort

3

Die Regex passt E-Mail-Adressen:

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

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

jedoch:

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

Das Zeilenvorschubzeichen \n wird an jeden Eingang von gets angehängt.

Deshalb wird die until Schleife für immer laufen unabhängig davon, was Sie in das Terminal eingeben werden. Das übereinstimmende Ergebnis ist immer nil wegen des Newline-Zeichens.

Versuchen Sie es mit gets.chomp, die das Newline-Zeichen trimmen und Ihr Code sollte funktionieren.