PHPで正規表現(全角ひらがな)

文字列が「全角ひらがな文字」のみであるか否かを判定するプログラムを試しにPHPで実装してみました。
最初は文字コードの範囲指定で簡単にできるかなぁって思ってたんですが、どうもそこまで甘くないっぽい(笑)。
んでもって、あっこういうときはやっぱ正規表現でしょ!まぁ配列に全角ひらがな文字全部つっこんで、配列の要素にあるものと一致するかを見てもいいんだけど、それめんどいし、素人しかやらないよねそんなこと。

とりあえず、下記がコード。どっか間違ってるかもしれないけど、てか間違ってたら教えてください。あっあと、もっといいやり方あったら、教えてください。

このコードの前提条件:文字コードEUC-JP
//start code
init();
}

// 初期化処理
function init() {
$this->moji = "";
}

// セッター
function set_moji($str) {
$this->moji = $str;
}

// このクラスの実処理
// return 全てひらがな : TRUE ? 違う文字まざってる : FALSE
function exec() {
if (preg_match("/^(?:\xA4[\xA1-\xF3])+$/", $this->moji)) {
return TRUE;
} else {
return FALSE;
}
}

// クラス変数
private $moji;
}

$obj = new all_zenkaku_hiragana();
$obj->set_moji("あいうえお");
if($obj->exec()) {
echo "OK";
} else {
echo "NG";
}
?>
//end code

まぁ最大のポイントはfunction execの中身ですねぇ。
preg_match("/^(?:\xA4[\xA1-\xF3])+$/", $this->moji)

下記は簡単なメモ書きになっちゃいますけど(笑)
preg_matchはPHP正規表現を扱うのに使うメソッド
「/^」は文字列の最初
「$/」は文字列の最後
「?」は直前のパターンマッチ0個か1個
「+」は直前のパターンマッチ1個以上
「(?:\xA4[\xA1-\xF3])」は実際のヒットさせたいパターンになるっぽい。
※(?:regexp)は部分正規表現のグルーピング http://www.kt.rim.or.jp/~kbk/regex/regex.html 参照


で、EUC文字コード
http://ash.jp/code/unitbl21.htm
をみるです。

そうすると、全角ひらなが文字にあたるコードは「A4A1」から「A4F3」になることがわかるんですね。しかも、このコードみてみると順番どおりならんでる!!

上記文字コード表の該当箇所をじっとみると、前半の2バイト「A4」はどうも全部一緒だよー。後半の2バイトは可変だよー。
じゃぁー後半の2バイトの部分だけ、範囲指定する記述にすりゃぁいいじゃぁないですか!。
つまり、「A4」と「A1」から「F3」というパターンが指定できればいいっすよね。

ってことで、上記のことを正規表現の記述ルールにあてはめてやると、preg_match("/^(?:\xA4[\xA1-\xF3])+$/", $this->moji)になるです。
ちなみに、「\x」この部分は16進数でっせっていう記述で、まぁ決まりって感じ?