[PHP-users 12309] Re: PHPによる全角判定

shogo php-users@php.gr.jp
Tue, 24 Dec 2002 01:43:44 +0900


河瀬です。

ちと本筋とずれますが

moe さんは書きました:
>
>とりあえず1文字を判定する関数として以下のものを作りました。
>
>/* -----------------------------------------
> 全角コードチェック
> return ture : 全角コードである
>   false : 全角コードではない
>   -------------------------------------- */
>function isZenkakuCode($code) {
> $result = false;
>
> if(0xa1a1 <= $code && $code <= 0xfefe) {
>  $result = true;
> }
> return $result;
>}
>
>そして上記の関数を使うルーチン
>
> if(isZenkakuCode('あ')) {
>  echo "全角";
> } else {
>  echo "全角以外";
> }
>
>を組み込みテストしましたが、「全角以外」と表示されてしまいます。
>やはり設定した「あ」の1バイト目のみが判定の対象となっているのでしょうか?
>設定した「あ」の文字コードを判定の対象にしたい場合、どうすればよいのでしょう
>か?

上記の例の場合、単純に'あ'という文字が「数字文字列」として解釈・比較されますので、
文字コード単位の比較にはなっていません。この場合はPHPのunpack関数を使用して、
文字コードに変換する必要があるでしょう。

・・・で、本題ですが僕の場合でしたら正規表現を用いて

	if (preg_match('/^[\x20-\x7F]$/', $code) {
		// 半角のみの場合の処理
	} else {
		// 全角が含まれる場合の処理
	}

ってやるだろうなぁ、と(mb_string系は信用しきれないところがあるので(^^;
参考にしてみてください。