0

PHP プログラムでメールを取得しようとしており、次の正規表現を使用しています

([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b)siU

これは、標準の電子メールを取得するためにうまく機能しているようです. me @ gmail.comまたはなどyou @ hotmail.com

これが失敗するのは、co.uk などの末尾のメールです。今、正規表現に co.uk を追加しようとしました

([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|co.uk|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b)siU

しかし、それは元の正規表現と同じ出力を与えるだけです。メールの出力は you@co です。私も英国で追加しようとしました。これには何が欠けていますか?それを捨てるのは2期目ですか?

理想的には、.com .net .org co.uk .au .ca のすべてのメールをキャッチできるようにしようとしています。基本的に、米国、英国、オーストラリア、およびカナダのすべての電子メールを検索しています。私の間違いが、米国以外の電子メールを次のように適切に出力できることを誰でも見つけることができますyou @ yoursite.co.ukyou @ yoursite.co

ありがとうございました。たとえば、表示されている電子メールのスペースは、これを投稿するためだけに存在します。

編集:私は電子メールを検証しようとはしていません.一連の電子メールは配列内にあるものであれば何でもかまいません.データベースの特定のものだけをキャッチしようとしています. 最初にそれを明確にしなかったことをお詫び申し上げます。

Edit2:これが私の問題に対する私の作業文字列です。みんな、ありがとう

^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$^
4

5 に答える 5

1

メールアドレスの検証に正規表現を使用しないでください。それを正しく行うライブラリを使用してください。

詳細については、RFC を読むまで電子メール アドレスを検証する方法を知っていたを参照してください。

于 2013-04-25T06:53:20.420 に答える
0

これには何が欠けていますか?

用語を非キャプチャ グループに追加しています。では、正規表現に基づいた出力に、非キャプチャ グループに何かを含めるにはどうすればよいでしょうか? nacholibreが言及した、あなたが追加した用語の間違いは言うまでもありません。

于 2013-04-25T06:52:09.687 に答える
0

|co.uk|

してみてください( [] ではなく、ドットはリンクを壊す以外の意味です)

|co\.uk|
于 2013-04-25T06:48:58.590 に答える