メモしよっと

なんでもメモするブログです。

$_POST['fieldName']未定義と空値を別々にチェックしたい - CodeIgniter

CodeIgniterのフォームバリデーション機能を使って$_POST['fieldName']の検証を行っている。
$_POST['fieldName']が未定義の時と、定義はされた上で空値が渡された時とで検証を分けたかった。
ルールリファレンスを確認したところ、未定義と空値を判別するルールはない。
requiredを使うとどちらもfalseになってしまう。

仕方がないので、ユーザー定義検証関数を作成して、以下の検証をすることにした。

・$_POST['fieldName']が未定義の時はtrue
・$_POST['fieldName']が指定されたうえ、入力値がなかったらfalse

ルール

<?php
$this->form_validation->set_rules('fieldName', 'fieldName', 'callback_custom_min_length[fieldName]');

ユーザー定義検証関数

<?php
function custom_min_length($str, $field){

    if (!isset($_POST[$field])) {
            return true;
    }
    if ($str == '') {
            $this->form_validation->set_message('custom_min_length', 'The '.$field.' field must be at least 1 characters in length.');
            return false;
    }
    return true;
}

第一引数の$strには入力値が代入される 第二引数の$fieldには、ユーザー定義検証関数の[]で指定した値が代入される