2012-03-29 5 views
0

これは私のInfoModelにおける検証です。 誕生日を確認したいしかし、「birthday」フィールドはDB内でint(8)です。 Unluckily私はMySQL DBテーブルを変更する権限がありません。今、それを検証する方法は?誕生日の誕生日を整数型で検証する

例:19800101

私はこれを試してみましたが、私は文字列に誕生日を変換するためのソリューションを考えることはできません。

var $validate = array(
    'job_id'  => array('rule' => 'notEmpty'    , 'message' => 'Text here'), 
    'sex_id'  => array('rule' => 'notEmpty'    , 'message' => 'Text here'), 
    'first_name' => array('rule' => array('between', 1, 5) , 'message' => 'Text here'), 
    'last_name'  => array('rule' => array('between', 1, 5) , 'message' => ''), 
    //'birthday'  => array('rule' => 'some regex', 'message' => 'Text here') 
); 

答えて

1

私は正規表現でのみ、うるう年と1か月の合計日数を含む日付を検証できないと考えています。

独自の検証方法を追加できます。これを試してみてください:

public $validate = array(
     'birthday' => array(
      'rule' => 'validateBirthday', 
      'message' => 'Wrong date of birthday' 
     ) 
); 

public function validateBirthday($check) { 
    $value = array_values($check); 
    $value = $value[0]; 

    if (preg_match('/^(\d{4})(\d{2})(\d{2})$/', $value, $matches)) { 
     return checkdate($matches[2], $matches[3], $matches[1]); 
    } else { 
     return false; 
    } 
} 

詳細情報:誕生日はint型であるとき

+0

それは動作しますか? $ checkをキャストする必要がありますか? – Emerald214

+1

はい、動作します。私は 'preg_match()'を使って日、月、年を分けます。あなたのモデルに 'validateBirthday'関数を含め、' $ validate'変数を変更するだけです。 –

関連する問題