preg_match() などの正規表現で「abcd」に一致するパターンの書き方は「^abcd$」というのが一般的ですが、ラインフィードなどの記号が混じっていた場合すり抜けてしまうケースが有るようです。
[参考サイト]
「正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう」
http://blog.tokumaru.org/2014/03/z.html
<?php $value = "abcd\n"; echo strlen($value); if( preg_match('/^abcd$/', $value) ){ echo 'OK'; } else { echo 'NG'; } if( preg_match('/\Aabcd\z/', $value) ){ echo 'OK'; } else { echo 'NG'; }
上が「^~$」を使った通常のパターンで、下は「\A~\z」を使ったパターンです。
通常のパターンではチェックをすり抜けて「OK」となってしまいますが、改行コードが末尾に付いているため文字数をカウントすると5文字になっています。
これは GET で「index.php?value=abcd%0a」のように受け取る場合でも同様です。
Similar Posts:
- [PHP]「キリ番」を判定する
- [PHP]最低限覚えておきたい必須関数一覧
- [PHP]basename() はマルチバイトに対応できない?
- [PHP]ひらがな・カタカナをローマ字に変換する
- [PHP]自然言語処理(形態素解析)を利用した簡易全文検索
- Symfony 3 のインストールと基本構成
- [PHP]テキストに自動で段落分け<p>、改行<br />タグをつける(文字列のHTML化)
- [PHP]FTPでアップロードやダウンロード等のファイル操作を行う