[PHP]文字が、かな、カナ、漢字、アルファベット、数字以外か判定する

アフィリエイト広告を利用しています

このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です

たとえば、登録フォームの「名前」欄とか・・・。

ユーザーが入力した文字に、記号や見えない文字など、適さない文字が含まれているかチェックします。

つまり・・・「ひらがな」「カタカナ」「漢字」「アルファベット」「数字」
これらの文字は許可するが、それ以外の文字が1つでも含まれていたら許可したくない場面。

/*
* 引数のテキストが、
* - 半角英数字
* - 全角カタカナ
* - 全角ひらがな
* - 漢字
* これら以外の文字を含むか確認。
* true : 含む
* false : 含まない
*/
function checkAlfNumKanaKanji($text){
return (preg_match('/[^a-zA-Z0-9ぁ-ん一-龠ァ-ヴー]/u', $text));
}

こんな感じです。
次のように使います。

// UTF-8の前提です。
mb_regex_encoding('utf-8');
mb_internal_encoding('utf-8');

$text = 'ひらがなカタカナ漢字abc123';

// 英数字を半角に、半角カナを全角カナに
$text = mb_convert_kana($text, 'KVa', 'utf8');

// ↓はfalseを返します。
if (checkAlfNumKanaKanji($text)){
echo 'NG';
}

// 不正な文字を加える。
$text .= ',,,,,';

// ↓はtrueを返します。
if (checkAlfNumKanaKanji($text)){
echo 'NG';
}

たった1行なんだし、functionにする意味は?

if (preg_match('/[^a-zA-Z0-9ぁ-ん一-龠ァ-ヴー]+/u', $text){
echo '不正な文字が含まれています。';
} else {
echo 'OKです';
}

こう書いても良いんですけどね。

でも、こんな長いIF文(正規表現)を覚えていられますか?
比較箇所が多いと大変だし、異なるプロジェクトを開発するとなったら、またこの正規表現を思い出す(取り出す)必要があります。

なので、私は関数化して、「Utility.php」に放り込みました。