教えてください。

PHPで、シフトJISの第2水準にマッチする正規表現を作りたいと考えています。

いろいろネットを調べて、次のようなプログラムを作りました。

//言語指定(日本語を扱う場合はJaかJapanese)
mb_language("Japanese");
//内部エンコードの設定
mb_internal_encoding("SJIS");
if(mb_ereg('^[弌-熙]+$', $value)){
echo "第2水準です";
}

しかし、これを実際に動作させてみると最初の「弌」という文字はマッチするのですが、他の文字がマッチしてくれません。
なにか間違えてしまっているでしょうか? 教えていただければ幸いです。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/03/08 03:50:23
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kurukuru-neko No.3

回答回数1844ベストアンサー獲得回数155

ポイント40pt

動作させてみたら動作しませんね。(PHP 5.1.2)

valueの文字は正しい内部コードに変換されているとして

echo "Internal Encoding ".mb_internal_encoding()."\n";

echo "Regex Encoding ".mb_regex_encoding()."\n";

echo MB_OVERLOAD_STRING . "\n";

echo MB_OVERLOAD_REGEX . "\n";

をソースにいれてみてください。

mb_regex_encodingがSJISでない場合

mb_regex_encoding("SJIS");

を設定する

MB_OVERLOAD_MAIL

MB_OVERLOAD_STRING

MB_OVERLOAD_REGEX

http://jp.php.net/manual/ja/ref.mbstring.php

id:selter

ご回答ありがとうございます! まさに、おっしゃるとおりの方法で解決できました。

mb_regex_encodingが EUCのままになってしまっていたようです。internal_encodingには気を遣ったのですが、ここには気が届きませんでした。。

スッキリ解決できました。誠にありがとうございました!

2007/03/08 03:48:54

その他の回答2件)

id:kurukuru-neko No.1

回答回数1844ベストアンサー獲得回数155

ポイント25pt

シフトJISの第2水準のみの文字列にマッチですか?

http://midilin.sakura.ne.jp/midilin/yasuda/memo/prg_db/index.php...

したいのはシフトJISの第2水準の文字が含まれていた

場合を調べたいようにも見えます?

id:selter

最終的にやりたいプログラムとしては、第2水準が入っていたら「使えません」と表示したいのですが、今はテストプログラムとして第2水準にマッチしたらメッセージを出すようにいたしました。

確認自体は1文字だけ第2水準の漢字を入力して試しているのですが、うまく行かなくて困っています。。なにか、お分かりになりましたら教えていただけると幸いです。

2007/03/06 19:56:35
id:Yota No.2

回答回数453ベストアンサー獲得回数28

ポイント15pt

「弌から熙」の間に何文字あるのかわかりませんが、全部並べれば確実と思います。

[〇一二三四五六七八九十]という正規表現を見たことがあるので、[〇-十]なんてゆうのも使えないのではないでしょうか。

id:selter

確かに、すべてを並べる方法もあるのですが、第二水準漢字だけでもものすごい数があったのです。。とても並びきれませんでした。。

ご回答ありがとうございました。

2007/03/08 03:47:58
id:kurukuru-neko No.3

回答回数1844ベストアンサー獲得回数155ここでベストアンサー

ポイント40pt

動作させてみたら動作しませんね。(PHP 5.1.2)

valueの文字は正しい内部コードに変換されているとして

echo "Internal Encoding ".mb_internal_encoding()."\n";

echo "Regex Encoding ".mb_regex_encoding()."\n";

echo MB_OVERLOAD_STRING . "\n";

echo MB_OVERLOAD_REGEX . "\n";

をソースにいれてみてください。

mb_regex_encodingがSJISでない場合

mb_regex_encoding("SJIS");

を設定する

MB_OVERLOAD_MAIL

MB_OVERLOAD_STRING

MB_OVERLOAD_REGEX

http://jp.php.net/manual/ja/ref.mbstring.php

id:selter

ご回答ありがとうございます! まさに、おっしゃるとおりの方法で解決できました。

mb_regex_encodingが EUCのままになってしまっていたようです。internal_encodingには気を遣ったのですが、ここには気が届きませんでした。。

スッキリ解決できました。誠にありがとうございました!

2007/03/08 03:48:54

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません