投稿者 |
メッセージ |
|
< PHPプログラミング ~ mb_eregによる全角カタカナ確認(正規表現)について |
|
時間:
月 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とならないのでしょうか?(文字コードあたりが原因なのでしょうか?)また回避策はないのでしょうか? |
|
|
|
|
|
|
|
時間:
火 2月 21, 2006 10:38 am
|
|
|
|
内部の文字コードが違うとマッチしません。
mb_regex_encoding などで文字コードを確認/設定してみてください。 |
|
|
|
|
|
|
|
時間:
火 2月 21, 2006 11:23 pm
|
|
|
|
回答どうもありがとうございます。
ファイルの文字コードはSJISだったので、
早速mb_regex_encoding('SJIS')により
文字コードをSJISとしました。
すると
・「ァ」(小さい「あ」)を除き正常結果を返すようになりました。
・「ソ(そ)」でエラーとなる件は相変わらずです。
上記について回避方法はありますでしょうか?
なおmb_internal_encodingで文字コードを
一致させても結果は同じでした。 |
|
|
|
|
|
|
|
時間:
水 2月 22, 2006 9:33 am
|
|
|
|
「ァ」が正常な結果を返さないのは当たり前です。
「ァ」はシフトJISでは8340、「ア」は8341です。
つまり提示されているスクリプトでは「ァ」は元々引っかからないのです。
ちなみに「ン」よりも後ろにあるカタカナとしては「ヴ」「ヵ」「ヶ」があります。
コード表を見れば一目瞭然です。
「ソ」についてですが、手元の環境ではエラーになりませんでした。
php.iniでmbstring関係の設定はどうなっていますか?
(念のためphpのバージョンも)
それからエラーっていうのは正確にはどんなエラーメッセージなのでしょう?
ちなみに、「ソ」はシフトJISだと835Cと「\」を含んでいるので、
そのためのエラーかなという気もしますが……。
難にしても、設定などがどうなっているか次第だと思います。 |
|
|
|
|
|
|
|
時間:
水 2月 22, 2006 10:04 am
|
|
|
|
|
|
|
|
|
時間:
水 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 |
|
|
|
|
|
|
|