<?xml version="1.0" encoding="UTF-8" ?>
<entry
	xmlns="http://www.w3.org/2005/Atom"
	xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
	xml:lang="ja-JP"
>
	<title>PHPでメールアドレスかどうか調べる方法</title>
	<id>tag:txqz.net,2007-05-31:blog/2007/05/31/1116</id>
	<link rel="self" href="http://txqz.net/blog/2007/05/31/1116.atom"/>
	<link rel="alternate" type="application/rss+xml" href="http://txqz.net/blog/2007/05/31/1116.rdf"/>
	<link rel="alternate" type="application/xhtml+xml" href="http://txqz.net/blog/2007/05/31/1116.xhtml"/>
	<link rel="alternate" type="text/html" href="http://txqz.net/blog/2007/05/31/1116.html"/>
	<link rel="contents" href="http://txqz.net/blog/2007/05/31/.atom" title="2007年5月31日"/>
	<link rel="first" href="http://txqz.net/blog/2001/08/04/0001.atom" title="地球空冷化"/>
	<link rel="prev" href="http://txqz.net/blog/2007/05/31/0012.atom" title="人身事故＋判断ミスで2時間遅れ"/>
	<link rel="next" href="http://txqz.net/blog/2007/05/31/1842.atom" title="鈴木寛がSecond Lifeに選挙事務所"/>
	<link rel="last" href="http://txqz.net/blog/2008/11/06/2333.atom" title="はてなブックマークがリニューアルするみたいなので使い方などを振り返る"/>
	<author>
		<name>陽坂智佐</name>
		<email>spambasket@txqz.net</email>
	</author>
	<content type="xhtml">
		<div xmlns="http://www.w3.org/1999/xhtml">
<p><a href="http://twitter.com/otsune/statuses/83550702" title="Twitter / Masafumi Otsune: この正規表現は大雑把すぎて酷い。害を振りまいている |...">Otsuneのtwitter</a>経由で<a href="http://phpspot.net/php/pg%90%B3%8BK%95%5C%8C%BB%81F%83%81%81%5B%83%8B%83A%83h%83%8C%83X%82%A9%82%C7%82%A4%82%A9%92%B2%82%D7%82%E9.html" title="正規表現：メールアドレスかどうか調べる - phpspot">phpspotがオススメするメールアドレスの正規表現</a>。8:2ルールを採用したような簡便な正規表現に<a href="http://b.hatena.ne.jp/entry/http://phpspot.net/php/pg%90%B3%8BK%95%5C%8C%BB%81F%83%81%81%5B%83%8B%83A%83h%83%8C%83X%82%A9%82%C7%82%A4%82%A9%92%B2%82%D7%82%E9.html" title="はてなブックマーク - 正規表現：メールアドレスかどうか調べる - phpspot">はてブのコメント欄</a>が賑わっている。</p>
<p>ていうか<a href="http://www.google.co.jp/search?q=%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9+%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE&amp;lr=lang_ja" title="メールアドレス 正規表現 - Google 検索">「メールアドレス」「正規表現」でぐぐる</a>と<a href="http://www.tt.rim.or.jp/~canada/comp/cgi/tech/mailaddrmatch/">最初に出てくるリソース</a>に、思いっきり<q title="" cite="http://www.tt.rim.or.jp/~canada/comp/cgi/tech/mailaddrmatch/">メールアドレスに一致する正規表現は「ありません」</q>なんてあって、その下に<em>条件付き</em>の鬼のような正規表現が紹介されている。メールアドレスの闇は深い。ヘタに触れると火傷する。</p>
<p>一応<q title="" cite="http://www.tt.rim.or.jp/~canada/comp/cgi/tech/mailaddrmatch/">正確なアドレスを弾かずに、「なるべく」おかしなアドレスを弾く正規表現</q>として</p>
<pre><code class="perl">$d3     = '\d{1,3}';
$ip     = join('\.', ($d3) x 4);
$ascii  = '[\x01-\x7F]';
$domain = '([-a-z0-9]+\.)*[a-z]+';
$mailre = "^$ascii+\@($domain|\\[$ip\\])$";

# $mailre = '^[\x01-\x7F]+@(([-a-z0-9]+\.)*[a-z]+|\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])';</code></pre>
<p>が紹介されていた。</p>
<p>あと、はてブで<a href="http://b.hatena.ne.jp/shoma/" title="はてなブックマーク - shomaのブックマーク">id:shoma</a>さんが<q title="はてなブックマーク - shomaのブックマーク / 2007年05月30日" cite="http://b.hatena.ne.jp/shoma/20070530#bookmark-4858948">Mail_RFC822::isValidInetAddress()使おうよ..</q>と言っていた。<a href="http://pear.php.net/reference/Mail-1.0.2/Mail/Mail_RFC822.html" title="Docs For Class Mail_RFC822">PEARにそういうクラスがあった</a>のか。件の関数は</p>
<pre><code class="php">    function isValidInetAddress($data, $strict = false)
    {
        $regex = $strict ? '/^([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})$/i' : '/^([*+!.&amp;#$|\'\\%\/0-9a-z^_`{}=?~:-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})$/i';
        if (preg_match($regex, trim($data), $matches)) {
            return array($matches[1], $matches[2]);
        } else {
            return false;
        }
    }</code></pre>
<p>として実装されていた。</p>
		</div>
	</content>
	<category term="PHP"/>
	<category term="メールアドレス"/>
	<category term="正規表現"/>
	<trackback:ping>http://txqz.net/blog/2007/05/31/1116/tb</trackback:ping>
	<trackback:about>http://d.hatena.ne.jp/j0hn/20070602/1180734236</trackback:about>
	<published>2007-05-31T11:16:49+09:00</published>
	<updated>2008-01-02T10:49:48+09:00</updated>
	<rights>Attribution-Noncommercial-Share Alike 3.0 Unported</rights>
</entry>