投稿者 メッセージ
<  PHPプログラミング  ~  mb_eregによる全角カタカナ確認(正規表現)について
ゲスト
投稿1時間: 月 2月 20, 2006 11:32 pm  引用






こんばんわ。もりそばと申します。

本サイトで紹介されている「mb_eregによる全角カタカナかどうかの確認」を使いHTMLフォームより受け取った値の確認をしたいのですが、いくつかののカタカナではうまく動きませんでした。

そこで全カタカナについてmb_eregでヒットするかどうか調べてみました。
あまり賢くない方法だとは思いますが、下記の通り羅列し結果を出してみました。

print "ア=" . mb_ereg("^[ア-ン]+$", "ア") . "<BR>";
print "イ=" . mb_ereg("^[ア-ン]+$", "イ") . "<BR>";



そのまま出力させているので「ア=1(改行)イ=1(改行)・・・」とでます。

結果、まとめると下記の通りでした。
・「ソ(そ)」ではなぜかSyntaxエラーとなる(のでコメントアウト)
⇒「syntax error, unexpected '>'」とでます
・ヤ、ユ、ヨ、ラ、リ、ル、レ、ロ、ワ、ヲ、ァ、ュ、ョではFALSE

なぜ全角カタカナであってもTRUEとならないのでしょうか?(文字コードあたりが原因なのでしょうか?)また回避策はないのでしょうか?
トップに移動
ゲスト
投稿1時間: 火 2月 21, 2006 10:38 am  引用






内部の文字コードが違うとマッチしません。
mb_regex_encoding などで文字コードを確認/設定してみてください。
トップに移動
ゲスト
投稿1時間: 火 2月 21, 2006 11:23 pm  引用






回答どうもありがとうございます。

ファイルの文字コードはSJISだったので、
早速mb_regex_encoding('SJIS')により
文字コードをSJISとしました。

すると
・「ァ」(小さい「あ」)を除き正常結果を返すようになりました。
・「ソ(そ)」でエラーとなる件は相変わらずです。

上記について回避方法はありますでしょうか?
なおmb_internal_encodingで文字コードを
一致させても結果は同じでした。
トップに移動
RR2000
投稿1時間: 水 2月 22, 2006 9:33 am  引用



登録日: 2006年2月 21日
投稿記事: 6

「ァ」が正常な結果を返さないのは当たり前です。
「ァ」はシフトJISでは8340、「ア」は8341です。
つまり提示されているスクリプトでは「ァ」は元々引っかからないのです。
ちなみに「ン」よりも後ろにあるカタカナとしては「ヴ」「ヵ」「ヶ」があります。
コード表を見れば一目瞭然です。

「ソ」についてですが、手元の環境ではエラーになりませんでした。
php.iniでmbstring関係の設定はどうなっていますか?
(念のためphpのバージョンも)
それからエラーっていうのは正確にはどんなエラーメッセージなのでしょう?

ちなみに、「ソ」はシフトJISだと835Cと「\」を含んでいるので、
そのためのエラーかなという気もしますが……。
難にしても、設定などがどうなっているか次第だと思います。
トップに移動
ユーザー情報を表示 メッセージを送信
ゲスト
投稿1時間: 水 2月 22, 2006 10:04 am  引用






EUCにしてやるといいと思う。
トップに移動
ゲスト
投稿1時間: 水 2月 22, 2006 12:51 pm  引用






ご回答いただきましてありがとうございます。

結論ですが、下記2点の対応により解決しました。
・ファイルの文字コードをEUCとする(mb_regex_encodingもEUCにあわせる)
・[ア-ン]⇒[ァ-ヶ]と変更

RR2000さんにご指摘いただいた通り、
文字コード表を見ると一目瞭然でした(^^ゞ
今までよく読んだことがなかったので非常に勉強になりました。

「ソ」はSJISのみ発生しました。
コード:print "ソ=" . mb_ereg("^[ァ-ヶ]+$", "ソ");
エラー:Parse error: parse error, unexpected '>'

PHPバージョンは5.0.5で、
mbstring回りは下記の通りです。
(見づらいですがご容赦ください)
mbstring.language = Japanese
;mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
mbstring.http_output = SJIS
;mbstring.encoding_translation = Off
;mbstring.detect_order = auto
;mbstring.substitute_character = none;
;mbstring.func_overload = 0
トップに移動
特定期間内の記事を表示:   
All times are GMT +9:00

次のトピックを表示
前のトピックを表示
Page 1 of 1
フォーラム一覧  ~  PHPプログラミング

トピックの新規投稿   返信


 
移動先:  

新規投稿: 不可
返信: 不可t
自分の記事の編集: 不可
自分の記事の削除: 不可
投票への参加: 不可




Powered by phpBB
customized by phpspot.