全角文字の正規表現

[新着] Webテンプレートを仮オープンしました



0   名前: うひょ : 2006/11/29(水) 23:58  ID:SM5jk8nN
掲示板で半角文字のみの書き込みを防止したいのですが
PHPで
if(!ereg("[^\x00-\x7F]",$str))
	error("コメントには1文字以上の全角文字を入れてください");

とやってみたのですがうまくいきませんでした。($strの文字コードはShift_JISです)
"半角文字以外の文字にマッチしなかったときエラー"という風にやったつもりなんですが
どうすればいいのでしょうか?
宜しくお願いします。

1   名前: 五月雨 : 2006/11/29(水) 23:58  ID:ebycPmKi
ん…?ここでPHPの質問は珍しいですね。
PHPで全角文字を認識させるには、mb系の関数を使います。

PHP: マルチバイト文字列関数 (mbstring) - Manual
http://jp2.php.net/manual/ja/ref.mbstring.php

if(strlen($string) != mb_strlen($string)){
	error("コメントには1文字以上の全角文字を入れてください");
}

2   名前: 五月雨 : 2006/11/29(水) 23:58  ID:ebycPmKi
余談ですが、

> ($strの文字コードはShift_JISです)

文字コードを Shift_JIS にして、処理を回すのはお勧めしません。
文字列を処理するときだけでも、EUC-JP, UTF-8 等にした方が問題が少なくて済むと思います。(UTF-8 なら、preg系関数で全角文字を認識できます)
もし、出力を Shift_JIS にしたいのでしたら、mb_convert_encoding で出力前に文字コードを変換すれば良いと思います。

PHP: mb_convert_encoding - Manual
http://jp.php.net/manual/ja/function.mb-convert-encoding.php

3   名前: うひょ : 2006/11/29(水) 23:58  ID:SM5jk8nN
そのような関数があったのですね
入門書程度じゃ載ってませんでした(^^;

大変参考になりました。
詳しい解説ありがとうございました。

一覧へ戻る