[PHP]メールアドレスの形式チェックにfilter_var()を使ってみた

Read More

メールアドレスの形式チェックにfilter_var()を使った独自関数を作ってみた。


■メールアドレス形式のチェック関数
<?php
// メールアドレスの形式チェック
function isMail($str=null) {
  $res = filter_var($str, FILTER_VALIDATE_EMAIL);
  return (boolean)strlen($res);
}// end function
?>



■動作テスト
<?php
$str = 'hoge@example.com';
if(isMail($str)) {
  echo 'ok';
}else {
  echo 'ng';
}
?>



■結果
> OK



filter_var()って名前からもわかるようにフィルタリング用のなので本来は形式のチェックに使うものではないんだろーね。
でも、ま、こういう使い方もできるねって話。

他にも面白そうなフィルターが使えるぽいねえ。
FILTER_VALIDATE_INT とか FILTER_VALIDATE_URL あたり使い道あるかもなあ。
http://www.php.net/manual/ja/filter.filters.validate.php




--
この記事ぺしぺし書いててふと思ったんだけど、filter_var()のFILTER_VALIDATE_EMAILってどのメール仕様に対応してるんだろう。
PHPマニュアルにはみたところそういうのが書いてなかった。


メール仕様そのものはwikiによると、
RFCのRFC 5321 (Simple Mail Transfer Protocol) [1]およびRFC 5322 (Internet Message Format) [2]が存在し、
メールアドレスに使用できる文字が定義されている。
†wiki調べ

ってことなんだけど、
filter_var()は…というかFILTER_VALIDATE_EMAILは、このRFC5321とかRFC5322とかに対応してるのかしら?


まあ仮にこれに対応してたとしても、独自のメール仕様に対応させようと思った場合はどうすればいいんだろ。


FILTER_VALIDATE_EMAIL以外にもOptionとか定数とかあるのかなーと思ってみてみたけどそれらしいものは他にはなかった。

ってことは今のとここの関数(正確には定数)を「使う」か「使わないか」の2拓しかないわけね。




--
んでまたふと思ったんだけど、以前「日本語ドメイン」とかいうのがあったよねえ確か。
あまり流行らなかったみたいだけど。

うろ覚えの記憶によるとそれは確か「URLに日本語使えるよ!」とかいうのが売りだったと思うんだけど、
ひょっとしてメールのドメインにも使えたのかなあ。

つまり、
"hoge@シラサヤ.com"
みたいなメールアドレスが使えるのかな?


でもそれってRFC5321、RFC5322 準拠じゃなくて完全に日本独自の仕様っぽいよねえ。
RFCのメール仕様を確かめるまでもなく。


もしクライアントがこの日本語ドメイン使ったメアドを使ってて、
「日本語ドメインのメールにも対応してください!」
って言ってきたらどうしよー、とか妄想してみたりして。



























断る!







関連記事:
・スペースを含むメールアドレスの送信が失敗する
http://xirasaya.com/?m=detail&hid=223

・[PHP]メールアドレスのチェック関数
http://xirasaya.com/?m=detail&hid=113