0

次の正規表現を使用して、Rails アプリのメール DB でメールを検証しています。

/\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

それはちょっと動作しますが、この種のエラーがある無効なメールが残ります:

name@domain..com

それを避けるためにこの正規表現を書き直すにはどうすればよいですか、または有効な電子メールアドレスのみを残す必要がある電子メールリストをクリーンアップするのに最適な正規表現はどれですか? リストをクリーンアップするために、次のような方法を使用しています。

def mailSweep
  mails = Email.all.lazy
  for address in mails do
    if address.email.to_s =~ /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
      puts address.email.to_s + " " + "it's valid"
    else
      puts address.email.to_s + " " + "it's invalid, destroying..."
      address.destroy
    end
  end
end
4

1 に答える 1

1

私は提案します

/\A[^@\s]+@([-a-zA-Z0-9]{1,63}\.)+[a-zA-Z0-9]{2,63}\z/

この正規表現では、すべての正規の電子メール アドレスが許可されているわけではないことに注意してください。コメントが削除されたすべての RFC 822 有効な電子メール アドレスを許可するには、非常に複雑なものが必要です。コメントを含めたい場合は、正規表現の力を超えており、字句解析に行かなければなりません。

それでも、メールが本当に有効かどうかはわかりません。最善のチェ​​ックは、それに送信して、受信側システムがそれを受け入れるかどうかを確認することです。もちろん、それでも黙って捨てられるかもしれませんが……。

于 2013-06-09T23:18:44.153 に答える