Pages

2016年1月8日金曜日

CakePHP2 & CakePHP3 の alphaNumeric は日本語も通過する

CakePHP2 & CakePHP3 の alphaNumeric が日本語も通過しちゃうので、内容を確認したメモ


ソース

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');
}

パターン

http://php.net/manual/ja/regexp.reference.unicode.php

\p{Ll} | 小文字アルファベット
\p{Lm} | 擬似文字
\p{Lo} | 大文字小文字の区別や修飾文字を持たないその他の文字
\p{Lt} | タイトル文字
\p{Lu} | 大文字アルファベット
\p{Nd} | 多言語における10進数字

パターン修飾子

D (PCRE_DOLLAR_ENDONLY)

この修飾子を設定すると、パターン内のドルメタ文字は、検索対象文字列の 終わりにのみマッチします。
この修飾子を設定しない場合、ドル記号は、 検索対象文字列の最後の文字が改行文字であれば、その直前にもマッチします。
この修飾子は、m を設定している場合に無視されます。
Perl には、この修飾子に等価なものはありません。

u (PCRE_UTF8)

この修正子は、Perl 非互換な PCRE の機能を有効にします。
パターンと対象文字列は、 UTF-8 として処理されます。
この修正子は、UNIX では PHP 4.1.0 以降、Win32 では PHP 4.2.3 以降で 使用可能です。
また、PHP 4.3.5 以降では、パターンの UTF-8 としての妥当性も確認されます。
な対象文字列を preg_* 関数に渡しても、何もマッチしません。
無効なパターンを渡すと、E_WARNING レベルのエラーが発生します。
5オクテットおよび6オクテットの UTF-8 シーケンスは、PHP 5.3.4 以降 (PCRE 7.3 2007-08-28 以降) では無効とみなされます。
以前のバージョンでは、これらも UTF-8 として有効だとみなされていました。

※ 上記説明解りにくい人はこのサイトの説明見たら解るかも?
http://pentan.info/php/reg/use.html

処理内容

つまり上記文字のどれかが1回以上利用された文字だけで構成されたものかをチェックする

Followers