[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系は信用しきれないところがあるので(^^;
参考にしてみてください。