環境は、PHP4.3.7。configureで’--enable-mbstring’ ’--enable-mbstr-enc-trans’ ’--enable-mbregex’は通しています。
mb_ereg("^[ァ-ヶー ]*$", $str)
でどうですか?
正規表現は
^ … 文字列の先頭
[] … 中の文字群のうち任意の1文字に一致させる
ァ-ヶ … 全角カナの先頭と最後の文字、ハイフンで繋ぐとその範囲すべてを示す
ー … 長音
長音の後ろには半角スペースと全角スペースを並べています。
2度目です。
うちの以下の環境では問題有りません。
--
mbstring.detect_order auto
mbstring.encoding_translation On
mbstring.func_overload 0
mbstring.http_input auto
mbstring.http_output SJIS
mbstring.internal_encoding EUC-JP
mbstring.language Japanese
mbstring.substitute_character no value
--
$str = "リ";
if(mb_ereg("^[ァ-ヶー ]*$", $str)){
echo("OK");
}else{
echo("NG");
}
で試しても、NGになりますか?
フォームからの入力などだと、エンコード検出に失敗するケースもありますので、ぜひ確認してください。
上記スクリプトはOKでした。フォーム入力で試したところ、「リ」とだけ入力してもint(3)となりました。trim()をかけてから、上記正規表現にかけるとOKになりました。原因はよくわからないのですが、とりあえず動くようになりました。なんなんでしょうかね?
上記設定だと内部エンコードがEUCの場合、うまくいきませんでした。「リ」などが含まれるとエラーになってしまいます。EUCの場合は、どうしたらよいのでしょうか?