PHPで全角のみ入力を許可するバリデーション

PHPで全角のみ入力を許可するバリデーション

PHPで全角のみ入力を許可するバリデーションをする必要がありました
ググってもいま一つ新しい記事もなくなんだか怪しい。。
という訳でまとめて検証してみました

調査

・前提条件として文字コードはUTF-8です
・検索して引っかかったのを抽出しています

全角入力チェック|武蔵小杉で働くギークのブログ ~ノマドワーキングに憧れて~

~~~
$text = “文字列です。”;

$len = strlen($text);
// UTF-8の場合は全角を3文字カウントするので「* 3」にする
$mblen = mb_strlen($text, “UTF-8”) * 3;
// UTF-8でない時は↓のようにするらしい
// $mblen = mb_strlen($text, [文字コード]) * 2;

if($len != $mblen) {
echo “半角のみ。”;
} else {
echo “全角のみ。”;
}
~~~

正規表現で、文字列は全て全角文字か?のチェック(PHP編): プログラマーの雑記帳

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

PHP での「全角のみ」チェックはこれでいいんじゃないの – 頭ん中

2012/03/30 追記
~~~
検証

PHPUnitでテストしてみます

テストの条件

1.すべて全角
2.すべて半角
3.全角半角まじり
4.半角カナまじり
~~~
/**
* @assert (‘文字列です。’) === true
* @assert (‘abcd1234+:;!’) === false
* @assert (‘全角abcd’) === false
* @assert (‘半角カナ’) === false
*/
~~~

結果

~~~
phpunit –colors –bootstrap isZen.php isZen
PHPUnit 3.6.10 by Sebastian Bergmann.

…F……..

Time: 0 seconds, Memory: 4.50Mb

There were 2 failures:

1) isZenTest::testIs_zen_strlen4
Failed asserting that true matches expected false.

FAILURES!
Tests: 12, Assertions: 12, Failures: 1.
~~~

2番目と3番目のものだけが正しいということになりました

テストと、関数はgithubに上げておきました
つっこみお待ちしています
nobuhiko/isZen · GitHub