14

でコードイグナイターを使用していPHPます。私は次のフォームを使用しています、

<?php
    echo form_open('/register/create_new', $form_params);
?>

DOB: <input type="text" id="dob" name="reg[dob]">
     <input type="submit" value="Create Account" />
</form>

ここで#dobは、dd-mm-yyyy形式です。

私の検証コードは、

array(
  'field' => 'reg[dob]',
  'label' => 'DOB',
  'rules' => 'required'
)

rules正しい日付検証を設定するにはどうすればよいですか?

4

10 に答える 10

21

日付が有効かどうかを確認する callback_date_valid() 関数を作成することで、 CodeIgniters コールバック関数を利用できます。

有効かどうかを確認するには、PHP の checkdate 関数を使用できます。

array(
  'field' => 'reg[dob]',
  'label' => 'DOB',
  'rules' => 'required|date_valid'
)

function callback_date_valid($date){
    $day = (int) substr($date, 0, 2);
    $month = (int) substr($date, 3, 2);
    $year = (int) substr($date, 6, 4);
    return checkdate($month, $day, $year);
}
于 2013-01-16T13:26:01.677 に答える
8

あなたはそれを行うことができますregex

$this->form_validation->set_rules('reg[dob]', 'Date of birth', 'regex_match[(0[1-9]|1[0-9]|2[0-9]|3(0|1))-(0[1-9]|1[0-2])-\d{4}]'); 
于 2013-01-16T13:16:55.220 に答える
0

Codeigniter 日付検証の実際の正規表現:

$this->form_validation->set_rules('reg[dob]','Date of birth',array('regex_match[/^((0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](19|20)\d\d)$/]'));

dd-mm-yyyy と dd/mm/yyyy の形式に同じ式を使用しています

警告とエラーはありません:-)

于 2017-06-23T04:15:27.047 に答える
0

iamyojimboの回答によると、

    $date = [
        '28.02.2012', // true
        '28/02/2012', // true
        '28-02-2012', // true
        '28 02 2012', // true
        '28 02 1812', // false
    ];

    $pattern = '/^(0[1-9]|[12][0-9]|3[01])[\.\/\-\ ](0[1-9]|1[012])[\.\/\-\ ](19|20)\d\d$/';

    foreach ($date as $subject) {
        print_r(
            preg_match(
                $pattern,
                $subject
            )
        );
    }
于 2021-02-26T13:25:24.793 に答える