[CakePHP2.x]validateのalphaNumericが環境に依存していた
使用環境:CakePHP2.3.1
現在開発中のシステムで、validate処理実装中に
「alphaNumeric」が正しく動作していなかったので調査してみたら
環境に依存する書き方になってた・・・
実は1.2から既にあったようだ。
忘れないようにメモ。
修正対象は\\lib\Cake\Utility\validation.php
修正前はPCREを利用する形でチェックを行っているが
PCREがバグったバージョンのPHPがあるそうで。修正版にバージョンアップしてもなおるそうです。
public static function alphaNumeric($check) { if (is_array($check)) { extract(self::_defaults($check)); } if (empty($check) && $check != '0') { return false; } return self::_check($check, '/^[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]+$/Du'); }
チェックする正規表現を普通の正規表現に書き換え
public static function alphaNumeric($check) { if (is_array($check)) { extract(self::_defaults($check)); } if (empty($check) && $check != '0') { return false; } //環境依存しないよう修正// return self::_check($check, '/^[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]+$/Du'); return self::_check($check, '/^[a-z\d]*$/i'); }
1.2時代から同一の書式みたいなので、ご注意をば。
参考にさせて頂いたサイト