cakePHPのvalidateのalphaNumericに関する質問です。

alphaNumericは半角英数字であることをチェックするもので、うまく動いてくれない状態におかれています。
環境は下記のとおりです。
PHP Version 5.2.6
CakePHP 1.2.1.8004

目的としては、ユーザー作成で、ユーザー名が半角英数字、ユニーク、半角4文字から20文字までの範囲での条件を前提にvalidateすることです。
関連のあるファイルは下記のように記載しています。
http://d.hatena.ne.jp/makotoworld/20090408/1239154210

問題点、解決策をご教授よろしくお願いいたします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/04/08 10:31:12
  • 終了:2009/04/15 10:35:02

回答(0件)

回答はまだありません

  • id:tdoi
    手元の環境では、期待通りに動いているように思えますが、どのようにうまく動いていないのでしょうか?
    また、AppControllerとかでは、特殊なことしていますか?
  • id:makotoworld
    libs/controllers/app_controller.phpのなかにvar $components = array('Auth');を加えているだけです。
  • id:tdoi
    で、どう入力に対して、どのような動作を期待していて、それに対してどんな現象がおきているんですか?

    正確にバージョンまではあわせていませんが、手元で動かした際に、ひらがなや記号を入れると弾かれますし、文字数(バイト数)のチェックもして、isUniqueも動作しているようでしたが。

    どんな入力でも許可してしまうとかでしょうか?
    それとも、弾いて欲しいひらがなをうけつけてしまうとか、

    そのあたりを具体的に教えてもらえると、もう少しコメントできるかもしれません。
  • id:makotoworld
    id:tdoiさん
    実際に半角英数字で入力しているのに期待通りに動かないのです汗
    isUniqueと文字数制限は問題ないのですが。
    やむ得なく、下記のように書きました。
    var $validate = array(
    'username' => array(
    array(
    'rule' => 'isUnique',
    'message' => 'このユーザ名はすでに使用されています。'
    ),
    array(
    'rule' => array('between', 2, 10),
    'message' => 'ユーザー名は半角英数字3文字以上20文字までです。'
    ),
    array(
    'rule' => array('custom', '/[a-z0-9]{3,}$/i'),
    'message' => 'ユーザー名は半角英数字3文字以上20文字までです。'
    )
    )
    );
  • id:tdoi
    ひょっとして、文字コードがUnicodeでなかったりしますか?
    正規表現はすごく詳しいわけではないですが、alphaNumericは、

    '/^[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]+$/mu'

    とのマッチングを行います。

    ここ(http://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt)によると、
    LlやLmなど、ここで使われているプロパティは、「UTF8, UTF16, UTF32で有効」なのだそうです。

    preg_matchの実装までは見ていませんが、ひょっとすると、そんなところが原因ではないかと。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません