人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: P-mako
●カテゴリ:ウェブ制作
✍キーワード:PHP RFC いるか アドレス 正規表現
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● junkitch
●30ポイント

http://www.din.or.jp/~ohzaki/perl.htm#Mail

Perlメモ

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

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

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

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

◎質問者からの返答

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

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

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

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


2 ● naoya3839
●25ポイント

http://www.05.to/

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

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

エラー処理

}


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

◎質問者からの返答

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

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

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

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


3 ● izayoimizuki
●15ポイント

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が通ります。

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

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

◎質問者からの返答

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ