PHP
preg_match

正規表現 PHPのpreg_match色々(全角や漢字も許可など)

More than 3 years have passed since last update.

はじめに

この記事をご覧になる方へ。
僕の浅学のまとめに対して、諸兄方がコメントをくれています。
すごく勉強になるので、コメントまで読んで頂ければ幸いです。
結局この記事は「正しい方法」という訳ではありません。
僕もまだ勉強中です。


ここからが記事

未だに良く分からん。
これキライだわ。
でも入力された値にはホワイトリストにしてマッチするようにしてる。
全然覚えられないからメモ。

メールアドレス形式のみ許可

$mailに入っている文字列をチェックしてます。

メールアドレスのみOK
if (preg_match('|^[0-9a-z_./?-]+@([0-9a-z-]+\.)+[0-9a-z-]+$|', $mail)) {
$mail = $mail;
}else{
$error = 'メールアドレスが不正です。';
}

メールアドレスに関してはこちらも読んでください

dankogaiさん が 怒っていた記事
http://blog.livedoor.jp/dankogai/archives/51189905.html

本気でメールアドレスを正規表現でマッチさせようとすると、こんな感じになってしまう例
http://www.din.or.jp/~ohzaki/perl.htm#Mail

半角英数のみ許可

$idをチェックしてます。

半角英数
if (preg_match("/^[a-zA-Z0-9]+$/", $id)) {
 $id = $id;
}else{
 $error = 'IDは半角英数で登録してください。';
}

半角数字のみ許可

半角数字のみ
if (preg_match("/^[0-9]+$/", $id)) {
 $id = $id;
}else{
 $error = 'IDは半角英数で登録してください。';
}

ひらがな、カタカナ、漢字を許可

$nameをチェックしています。

全角日本語
mb_regex_encoding("UTF-8");
if (preg_match("/^[ぁ-んァ-ヶー一-龠]+$/u",$name)) {
$name = $name;
}else{
$error = '日本語のみ使用可能です。';
}

全角文字を許可する場合は mb_regex_encoding("UTF-8"); を記述し
エンコードを UTF-8 にします。

そして最後に「装飾子」と言うものを入れれば大丈夫。
ここではif (preg_match("/^[ぁ-んァ-ヶー一-龠]+$/u",$name)) {の中の
uがそれです。(UTF-8として扱うという意)

装飾子:詳しくは▶コチラ【PHPマニュアル】
でも、コレって何回読んでも理解できん。これみんな分かるの?天才だね。

この人のが分かりやすい。▶PHPプログラミング解説

改行と「、」と「。」も許可

以下を許可してます。

  • ひらがな
  • カタカナ
  • 漢字
  • 「、」
  • 「。」
  • 改行
  • 半角英数(大小)
  • 半角数字
  • 全角数字
全部許可
if (preg_match("/^[ぁ-んァ-ヶーa-zA-Z0-9一-龠0-9、。\n\r]+$/u",$message)) {
$message = $message;
}else{
$error = '変な記号は使わないでね。';
}

まとめたけど…
やっぱキライだわコレ。