PHPで、emailアドレスがRFC規約に沿っているかをチェック(preg_match)する正規表現を教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/10/30 14:12:49
  • 終了:--

回答(3件)

id:junkitch No.1

junkitch回答回数40ベストアンサー獲得回数02005/10/30 14:34:56

ポイント30pt

Perlでのメールアドレスの正規表現が載っています。

PHPに書き直したら、下のようになるようですが…。

http://red.ribbon.to/~php/memo_003.php

PHP MEMO / PHPメモ - メールアドレスの書式のチェック

id:P-mako

ご回答ありがとうございます。

RFCに沿うとなると、すさまじい正規表現になるんですね。

ハードルを下げます。ここまで厳密でなくて良いので、emailアドレスをチェックする正規表現を教えてください。

※厳密でないとは、コメントのネスト云々なんてものは必要ないので、ごく一般的な user@domain のような形式です。

2005/10/30 14:48:30
id:naoya3839 No.2

naoya3839回答回数59ベストアンサー獲得回数02005/10/30 23:53:57

ポイント25pt

http://www.05.to/

世界一短い?URL転送 05.to

if (! ereg(”[a-zA-Z0-9_.¥-]+@[a-zA-Z0-9_.¥-]+”, $mailAdrs)){

  エラー処理

}


上記で一般的なメアドの形式チェックは実装できるかと思います。

id:P-mako

ご回答ありがとうございました。

preg_match(”/^[_a-z0-9-]+(¥.[_a-z0-9-]+)*@[a-z0-9-]+([¥.][a-z0-9-]+)+$/i”, $email)

こんな正規表現も見つけました。

これで終了させていただきます。

2005/10/31 10:25:30
id:izayoimizuki No.3

izayoimizuki回答回数302ベストアンサー獲得回数02005/10/31 05:58:56

ポイント15pt

function Ufun_mailaddr_check ($main) {

$error = ””;

if (ereg (”[0-9a-zA-Z¥.¥-]@[0-9a-zA-Z¥.¥-]”, $main)) {

$main = ereg_replace (”[^@]*@”, ””, $main);

if (ereg (”[0-9]{1,3}¥.[0-9]{1,3}¥.[0-9]{1,3}¥.[0-9]{1,3}”, $main)) {

$ip = explode (”.”, $main);

$x = ””;

for ($i = 0; $i < 4; $i++) {

if ($ip[$i] < 0 or $ip[$i] > 255) {

$x = $x . ”error”;

}

}

if ($x) {

$iperror = ”Error”;

}

}

if (!ereg (”^[0-9a-zA-Z¥-¥.]*[¥.]{0,1}[0-9a-zA-Z¥-]{3,58}¥.[a-zA-Z]{2,3}[¥.]{0,1}[a-zA-Z]{0,2}$”, $main)) {

$hosterror = ”Error”;

}

if ($iperror and $hosterror) {

$error = ”Error”;

}

} else {

$error = ”Error”;

}

return $error;

}

以前私が自作したものです。

user@domain又はuser@ipが通ります。

ほぼ不正なアドレスを除外できるレベルと言えます。

最大の難点は重いことです。

id:P-mako

ご回答ありがとうございます。

izayoimizukiさんのおっしゃるとおり、少しコード量的に重いですね。

「一般的」という表現自体あいまいで申し訳ありませんでしたが、私のイメージでは、1つの正規表現で網羅できる程度、で、たいがいのメアドにヒットするという落としどころでした。

→ ので、2番目の回答者さんのものが一番近いイメージでした。

そこの表現が足りず、申し訳ありませんでした。

2005/10/31 10:28:35

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません