2008年08月01日

正規表現で、文字列は全て全角文字か?のチェック(PHP編)


//全て全角文字か?
//PHPの正規表現で、渡された文字列が全て全角文字かチェックします。(UTF-8向け)
//PHP 正規表現 全角文字 UTF8
$str = "ABCDEFXYZあいうえおカキクケコ@!+*_";
if (!preg_match("/(?:\xEF\xBD[\xA1-\xBF]|\xEF\xBE[\x80-\x9F])|[\x20-\x7E]/", $str)) {
echo "すべて全角である"."<br>\n";
} else {
echo "すべて全角ではない"."<br>\n";
}
//↓
//"すべて全角である"


2013.7.4追記
当記事は、正規表現「半角文字の含まれているか?」で偽であれば「全角文字のみである」という判定を行っています。この正規表現に改行コード、タブコードの条件が含まれていないため、両コードも全角文字としてみなしてしまいますので留意下さい。

posted by 台北猫々 at 23:50| Comment(2) | TrackBack(0) | 技術メモ(PHP)
この記事へのコメント
このコードは間違いです。
文字列にタブや改行が入った場合でも全角として判定されてしまいます。

/(?:\xEF\xBD[\xA1-\xBF]|\xEF\xBE[\x80-\x9F])|[\x20-\x7E]/

この正規表現は半角文字か?という判定なのですが、反転したら全て全角ということにはなりませんので、文字列に改行コード等が入る場合は注意が必要です。

Posted by とおりすがり at 2013年05月11日 20:25
ASCII制御文字も厳密にチェックすればよいだけでは。

・元
/(?:\xEF\xBD[\xA1-\xBF]|\xEF\xBE[\x80-\x9F])|[\x20-\x7E]/

・ASCII制御文字チェックを追記
/(?:\xEF\xBD[\xA1-\xBF]|\xEF\xBE[\x80-\x9F])|[\x20-\x7E]|[\x00-\x1f\x7f]/
Posted by いまさらですが at 2015年01月22日 11:48
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/17522872

この記事へのトラックバック