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
コメント