2011-12-23 6 views
0

私はこの正規表現を使って1通の電子メールを検証しています。phpを使用して一度にテキストボックスまたはテキストエリアで複数のメールアドレスを検証する方法

/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/ 

どのようにカンマでテキストボックスまたはテキストエリアに複数の電子メールアドレスを検証する(、)とセミコロン(;)PHPを使用して一度に分離しました。

例:ABAC @ gmail.com、@ gmail.com ABCD; abcede @ gmail.com、ACF @ in.com

+0

まず、テキストからすべての電子メールパターンを抽出して検証する必要があると思います。 – Arfeen

+4

利用可能な場合は、['mailparse_rfc822_parse_addresses()'](http://php.net/mailparse_rfc822_parse_addresses)を使用してください。そうでなければコンマでリストを分割し、各リストのエントリを(トリプルではなく、あなたの非準拠のregexか、 'filter_var(..、FILTER_VALIDATE_EMAIL)で)検証します。 – mario

+1

そういうわけで、 '+'と '.info'または' .museum' TLDからの電子メールアドレスを拒否します。この正規表現は、電子メールアドレスをチェックしようとすると、さらに悪いです。 – Quentin

答えて

3
$emails = preg_split('[,|;]',$_POST['emails']); 
foreach($emails as $e){ 
    if(preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/',trim($e)) == 0){ 
     echo($e ."is not a valid email address"); 
    } 
} 

メールの配列にあなたの受信メールを破るべきです。その後、各電子メールに行き、正規表現をチェックします。電子メールが見つかると無効であると出力します。電子メールが無効であれば、コードが望むものにエコーを置き換えてください。 編集:カンマとセミコロンの両方を壊します

編集:正規表現が変更されました。 (申し訳ありませんが、私は投稿する前にそれを確認していませんでした。)

+0

カンマとセミコロンで区切られた値の両方を検証します。これは私が1つに分かれた値だけを行うのに役立ちます。 – vvr

+0

申し訳ありませんが、疑問が誤解されました。さて、カンマとセミコロンの両方を実行する必要があります。 –

+0

警告:preg_split()[function.preg-split]:デリミタは、英数字またはバックスラッシュであってはなりません。 警告:無効な引数がforeach()に対して提供されました – vvr

2

さて、ここで何かのリストを照合にあなたの正規表現を変換する方法についてのHOWTOがある:validate comma separated list using regex単純なアプローチは、あなたの文字列を分割され

、および

$list = str_getcsv($emails); // or preg_split on commas 
foreach ($list as $mail) { 
    if (!filter_var($mail, FILTER_VALIDATE_EMAIL)) { 
     return false; 
    } 
} 

それともUsing a regular expression to validate an email addressを使用してのために最後の行(?&address)/xを交換:

^\s* (?&address) (\s*,\s* (?&address))* \s* $ /x 
各エントリを(カンマが実際のアドレスで許可されているように、不正確であるのいずれか)を検証
+0

コンマとセミコロンで区切られた値の両方を検証したいこれは私が1つに分かれた値だけを行うのに役立ちます。 – vvr

+1

正規表現に '[、;]'を使うことも、カスタム 'preg_split'を使うこともできます。 – mario

関連する問題