Help us understand the problem. What is going on with this article?

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

More than 5 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 = '変な記号は使わないでね。';
}

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

tabo_purify
WEBに特化しています。 その他の言語は分かりません。 間違いを発見した方はご指摘くださいませ。
https://labo-iwasaki.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした