- 2009-03-19 (Thu) 15:07
- 開発ツール・技術

【さらに追記】
さらに追記です。さまざまな方につっこまれたのでちょっと調べてみました・・・。一番つっこまれたメールアドレスについては、厳密にやろうとするととてつもなく複雑になる、ことをまずはご理解ください。そのほかの電話番号やクレジットカード番号についてもご指摘いただきました。ありがとうございます。
- 二度目の公開!電話番号の正規表現 – にぽたん研究所
電話番号の正規表現について。正規表現の難しさを垣間見ることが・・・。
- 「かなり使えるPHPの正規表現まとめ」にツッコんでみる。 – あそことは別のはらっぱ。
紹介した正規表現について説明付かつ日本の事情にあわせて詳しく修正&コメントしていただいております。ありがとうございます!
- へぼへぼCTO日記 – メールアドレス(addr-spec)の正規表現
メールアドレスの正規表現について。PHP、Perl、Rubyでの書き方について詳しく紹介されています。
- さぼてん: 【PHP】メールアドレスをチェックする方法色々【正規表現】
こちらも正しいメールアドレスの正規表現に関する考察です。いくつかのブログを紹介しつつ説明してくれています。
- 「正しい方法」でメールアドレスを確認するには – J0hn D0e の日誌
こちらも興味深く拝読。それもメールアドレス?ってのが載っていてちょっとびっくり・・・奥が深いですね。
- PHPで、emailアドレスがRFC規約に沿っているかをチェック(preg_match)する正規表現を教えてください。 – 人力検索はてな
人力検索での質問&回答。こちらもご参考までに。
このブログやブックマークでの厳しいご指摘ありがとうございました。以後、気をつけます。
【追記】
こちらもあわせてご覧ください・・・。すみません、以後気をつけます。
» 404 Blog Not Found:「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ
これはメモしておかないと!「10 Practical PHP Regular Expression Recipes」です。PHPでウェブサービスをつくるときにはげしく使えそうな正規表現がまとまっていますよ(日本で使えそうもないものもちょっとありますが)。
個人的にまだ検証していないのであれですが、まずはメモということで・・・。
- メールアドレスの正規表現
メールアドレスは厳密にチェックしようとするとなかなか難しいのですが、簡単なチェックだったらこれでOKぽいですね。
$email = "test@example.com";
if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$email)) {
echo "Your email is ok.";
} else {
echo "Wrong email address format";
}
英数字と下線を入れた、5文字以上20文字以下のユーザー名チェック用です。
$username = "user_name12";
if (preg_match('/^[a-z\d_]{5,20}$/i', $username)) {
echo "Your username is ok.";
} else {
echo "Wrong username format.";
}
US用ですが。これをもとに日本語版をつくる勉強してもいいかもですね。
$phone = "(021)423-2323";
if (preg_match('/\(?\d{3}\)?[-\s.]?\d{3}[-\s.]\d{4}/x', $phone)) {
echo "Your phone number is ok.";
} else {
echo "Wrong phone number.";
}
IPアドレスチェック用。
$IP = "198.168.1.78";
if (preg_match('/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/',$IP)) {
echo "Your IP address is ok.";
} else {
echo "Wrong IP address.";
}
またしてもUS用ではありますが。
$zipcode = "12345-5434";
if (preg_match("/^([0-9]{5})(-[0-9]{4})?$/i",$zipcode)) {
echo "Your Zip code is ok.";
} else {
echo "Wrong Zip code.";
}
アメリカのソーシャルセキュリティ番号ですね。USではよく使います。
$ssn = "333-23-2329";
if (preg_match('/^[\d]{3}-[\d]{2}-[\d]{4}$/',$ssn)) {
echo "Your SSN is ok.";
} else {
echo "Wrong SSN.";
}
これも知っておくと良いかも。
$cc = "378282246310005";
if (preg_match('/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})$/', $cc)) {
echo "Your credit card number is ok.";
} else {
echo "Wrong credit card number.";
}
こちらもたまに必要になりますね。
$url = "http://komunitasweb.com/";
if (preg_match('/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i', $url)) {
echo "Your url is ok.";
} else {
echo "Wrong url.";
}
他の命令使えばできるような・・・ま、でも勉強にはなりますね。
$url = "http://komunitasweb.com/index.html";
preg_match('@^(?:http://)?([^/]+)@i', $url, $matches);
$host = $matches[1];
echo $host;
特定の文字列にスタイルを当てたいことってありますよね。そうしたときに使えそうです。
$text = "Sample sentence from KomunitasWeb, regex has become popular in web programming. Now we learn regex. According to wikipedia, Regular expressions (abbreviated as regex or regexp, with plural forms regexes, regexps, or regexen) are written in a formal language that can be interpreted by a regular expression processor";
$text = preg_replace("/\b(regex)\b/i", '<span style="background:#5fc9f6">\1</span>', $text);
echo $text;
正規表現は慣れないと使いづらいですよね。しかし使えると超絶便利。よく使うパターンを覚えておいて応用を利かせていきたいものです。
» 10 Practical PHP Regular Expression Recipes | KomunitasWeb
こちらもあわせてどうぞ
Comments:4
- 404から 09-03-19 (Thu) 21:33
-
http://blog.livedoor.jp/dankogai/archives/51189905.html
弾さんがお怒りです
まぁメモだって書いてるんだからそれほど目くじら立てんでもとおもいつつ。 - ゆりこ@プラグイン作者 09-03-20 (Fri) 1:10
-
というか、メールアドレス以外の正規表現もダメダメですよね。元ネタがそもそもよくない。
ユーザー名だって、なぜ \w を使わないのかさっぱり理解できませんし、末尾に改行文字があったときに通ってしまいますよね。($ は末尾の改行文字より手前にマッチします)
IP アドレスの検証も明らかに間違いで、「3332899150」も正当なアドレスなのに通りません。PHP ならば正規表現ではなく ip2long と long2ip で検証するのが好ましいでしょう。
SSN も [\d] のように1文字だけ文字クラスに入れる意図が分かりません。これなら \d\d\d と書く方がシンプルです。
ドメインなんて、アンダースコア (_) を通している時点で RFC1123 無視ですし、文字数制限をチェックしてないのはいけてないですね。
残念ながら、今回のは「使いものにならない正規表現10選」だと思います。正規表現を語るならば、「詳説 正規表現」は必読だと思いますが、元ネタ筆者がこれを読んでないことは明らかでしょう
- ちょんまげ犬 09-03-20 (Fri) 19:06
-
管理人さんが正規表現をまるで分かっていないことは初心者の自分ですら
分かるレベルなので今一度ちゃんと勉強されたほうが。。(?! ~ )
とか
(?: ~ )
の使い方すら知らないのでは無いかと思ってしまう感じです。
日本には表現の自由があるので「~を書くな」的なことを言う
つもりはありませんが、読者さんに迷惑がかかってしまうのは
残念ですね。 - yamazon 10-02-01 (Mon) 18:25
-
参考になりました。ありがとうございました!
Trackbacks:3
- Trackback URL for this entry
- http://www.ideaxidea.com/archives/2009/03/practical_php_regexs.html/trackback
- Listed below are links to weblogs that reference
- かなり使えるPHPの正規表現まとめ from IDEA*IDEA ~ 百式管理人のライフハックブログ
- trackback from 404 Blog Not Found 09-03-19 (Thu) 18:14
-
「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ
ああ、まただよ…
かなり使えるPHPの正規表現まとめ – IDEA*IDEA 〜 百式管理人のライフハックブログ 〜
正規表現って、プログラミング言語間の差が少ないサブ言語なのに、なぜ「PHP」がつくとダメ正規表現ばかり登場するのか。うんざりだ。
- trackback from 漫ろで行こう 09-03-19 (Thu) 20:22
-
[言語][PHP]非常に簡単な正規表現テンプレ
Twitter 上の はてブ BOT から飛んできたのでチョット気になって見てみました。
かなり使えるPHPの正規表現まとめ – IDEA*IDEA ~ 百式管理人のライフハックブログ ~
パッと見「おー、便利便… - trackback from Your Way, My Way, Any Way 09-03-20 (Fri) 11:08
-
PHPの正規表現使用例
IDEA*IDEA:かなり使えるPHPの正規表現まとめより簡単な正規表現の使い方の例を紹介。元は10 Practical PHP Regular Expression Recipes。上記2サイトの説明では、E-mailのValidationについて注意があり、紹…





















