人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

●質問者: selter
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:echo ja PHP SJIS エンコード
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kurukuru-neko
●25ポイント

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

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

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

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

◎質問者からの返答

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

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


2 ● Yota
●15ポイント

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

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

◎質問者からの返答

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

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


3 ● kurukuru-neko
●40ポイント ベストアンサー

動作させてみたら動作しませんね。(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

◎質問者からの返答

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ