PHPで、シフトJISの第2水準にマッチする正規表現を作りたいと考えています。
いろいろネットを調べて、次のようなプログラムを作りました。
//言語指定(日本語を扱う場合はJaかJapanese)
mb_language("Japanese");
//内部エンコードの設定
mb_internal_encoding("SJIS");
if(mb_ereg('^[弌-熙]+$', $value)){
echo "第2水準です";
}
しかし、これを実際に動作させてみると最初の「弌」という文字はマッチするのですが、他の文字がマッチしてくれません。
なにか間違えてしまっているでしょうか? 教えていただければ幸いです。
動作させてみたら動作しませんね。(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
シフトJISの第2水準のみの文字列にマッチですか?
http://midilin.sakura.ne.jp/midilin/yasuda/memo/prg_db/index.php...
したいのはシフトJISの第2水準の文字が含まれていた
場合を調べたいようにも見えます?
最終的にやりたいプログラムとしては、第2水準が入っていたら「使えません」と表示したいのですが、今はテストプログラムとして第2水準にマッチしたらメッセージを出すようにいたしました。
確認自体は1文字だけ第2水準の漢字を入力して試しているのですが、うまく行かなくて困っています。。なにか、お分かりになりましたら教えていただけると幸いです。
「弌から熙」の間に何文字あるのかわかりませんが、全部並べれば確実と思います。
[〇一二三四五六七八九十]という正規表現を見たことがあるので、[〇-十]なんてゆうのも使えないのではないでしょうか。
確かに、すべてを並べる方法もあるのですが、第二水準漢字だけでもものすごい数があったのです。。とても並びきれませんでした。。
ご回答ありがとうございました。
動作させてみたら動作しませんね。(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
ご回答ありがとうございます! まさに、おっしゃるとおりの方法で解決できました。
mb_regex_encodingが EUCのままになってしまっていたようです。internal_encodingには気を遣ったのですが、ここには気が届きませんでした。。
スッキリ解決できました。誠にありがとうございました!
ご回答ありがとうございます! まさに、おっしゃるとおりの方法で解決できました。
mb_regex_encodingが EUCのままになってしまっていたようです。internal_encodingには気を遣ったのですが、ここには気が届きませんでした。。
スッキリ解決できました。誠にありがとうございました!