日付フィールドを検証する適切な方法は実際にはありません。できることは、それを分割して、部分的にチェックすることだけです。
あります checkdate()
ますが、ドキュメントページのコメントで述べたように、日付入力をサニタイズする効果的な手段として使用することはできません。
私が通常チェックする最初のことは、データのタイプです。文字列を期待している場合、文字列にキャストし、整数値と配列値についても同様です。
// Casting example
$string = (string) $string;
$num = (int) $num;
$array = (array) $array;
日付フィールドの場合、通常は日付の各部分の間に区切りがあり、それに基づいて分割され、その部分(期待しているものはいくつでも)を整数としてキャストします。
$date = explode( '/', (string) $string );
$date = array_map( 'intval', $date );
// Now count the parts and validate them further - eg. you don't want negative values
もちろん、これは実際に日付を格納する方法とそのフィールドで何を期待するかに依存します。これは、特定のニーズに応じて適切にサニタイズする必要があるものです。
数値は非常に簡単で、最初にintにキャストします。
$num = (int) $var_with_num;
// Or
$num = absint( $var_with_expected_non_negative_num ); // absint is a WordPress function
次に、それが(質問ごとに)指定された範囲内であることを確認します。
// If it's not in range
if( $num < 100 || $num > 500 ) {
// Number is not in range
}
または..
// If it is in range - including 100 & 500 as possible values
if( $num >= 100 && $num <= 500 ) {
// Number is in range
}
文字列が特定の長さであるかどうかを確認するのは簡単です。実際には簡単です。strlenのPHPドキュメントにリンクします。
http://php.net/manual/en/function.strlen.php
日付の値は私の意見では最もトリッキーですが、実際には、そのフィールドに期待するものに合うようにコードを記述する場合です。たとえば、日付形式のフィールドがある場合D/M/Y
、/
(スラッシュ)が存在するはずであり、その区切り文字で分割すると、3つの数値の配列が得られることがわかります(分割されない場合) t 3つの値を与えるか、有効な数値ではない場合、データは無効でした)。
それがお役に立てば幸いです(そして、上記のいずれかに対してより良い方法がある人がいれば、私は批評の余地があります)。