PHPで、文字列に全角カナ、長音、全角半角スペースのみが含まれていることを判定する正規表現の書き方と使用するPHPの関数を教えて下さい。

環境は、PHP4.3.7。configureで’--enable-mbstring’ ’--enable-mbstr-enc-trans’ ’--enable-mbregex’は通しています。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/03/20 18:35:15
  • 終了:--

回答(2件)

id:ke_ishi No.1

ke_ishi回答回数269ベストアンサー獲得回数02005/03/21 01:24:00

ポイント30pt

mb_ereg("^[ァ-ヶー  ]*$", $str)

でどうですか?

正規表現は

^ … 文字列の先頭

[] … 中の文字群のうち任意の1文字に一致させる

ァ-ヶ … 全角カナの先頭と最後の文字、ハイフンで繋ぐとその範囲すべてを示す

ー … 長音

長音の後ろには半角スペースと全角スペースを並べています。

id:loy

上記設定だと内部エンコードがEUCの場合、うまくいきませんでした。「リ」などが含まれるとエラーになってしまいます。EUCの場合は、どうしたらよいのでしょうか?

2005/03/21 14:52:09
id:ke_ishi No.2

ke_ishi回答回数269ベストアンサー獲得回数02005/03/22 00:55:55

ポイント30pt

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になりますか?

フォームからの入力などだと、エンコード検出に失敗するケースもありますので、ぜひ確認してください。

id:loy

上記スクリプトはOKでした。フォーム入力で試したところ、「リ」とだけ入力してもint(3)となりました。trim()をかけてから、上記正規表現にかけるとOKになりました。原因はよくわからないのですが、とりあえず動くようになりました。なんなんでしょうかね?

2005/03/22 01:17:16

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません