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

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

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

つまり・・・「ひらがな」「カタカナ」「漢字」「アルファベット」「数字」
これらの文字は許可するが、それ以外の文字が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」に放り込みました。

広告