2012年7月30日月曜日

validationで日付のチェック

FuelPHP の Validation で日付のチェック

正規表現で値を分解して checkdate 関数でチェックやっただけ。
public static function _validation_valid_date($val)
{
    if (!$val)
    {
        return true;
    }
    
    $parts = array();
    // 形式はyyyy-mm-dd
    if (!preg_match('/^([0-9]{4})[\-\/\.](0?[0-9]|1[0-2])[\-\/\.]([0-2]?[0-9]|3[01])$/', $val, $parts))
    {
        return false;
    }
        
    if (checkdate($parts[2], $parts[3], $parts[1]) === true)
    {
        return true;
    }
    else
    {
        return false;
    }
}

日付の比較チェック

引数を1つ追加して比較用のフィールド名を指定
public static function _validation_compare_date($val, $field)
{
    if (!$val)
    {
        return true;
    }
    if (!Input::post($field))
    {
        return true;
    }
        
    $tmp_val_st = strtotime(Input::post($field));
    $tmp_val_ed = strtotime($val);
        
    if ($tmp_val_st > $tmp_val_ed)
    {
        return false;
    }
        
    return true;
}


もっときれいなソースをかけるようになりたい・・・



いままで正規表現するとき ereg 関数を使ってたけどこれは PHP5.3 から非推奨となってました。ereg 関数を使っている場合は preg_match 関数に置き換えないと・・・知らんかった。
PHP: ereg - Manual
PHP: preg_match - Manual




0 件のコメント:

コメントを投稿