PHP验证范围日期

时间:2015-10-29 04:43:22

标签: php

我有一个简单的代码,可以将测距日期分成两部分。这是:

HTML:

<input type="text" name="range" />
<button type="submit>Submit</button>

PHP

$range = $_POST['range'];
$reservation = explode("-", $range);
$from        = date('Y-m-d', strtotime($reservation[0]));
$to          = date('Y-m-d', strtotime($reservation[1]));

分割日期有效,但每当我在文本框中放置任何字符并点击提交时,我都会收到undefined offset: 1,因为我没有对范围日期进行任何验证。

有没有办法验证范围日期,例如,如果我将"10/29/2015 - 10/31/2015"放在文本框中并点击提交,我会得到&#34; success&#34;如果我放置任何像&#34; asdasdasda&#34;这样的字符,我会得到&#34; failed&#34;。

非常感谢任何帮助。

更新

如果输入处于范围日期,则验证现在正在进行,但日期验证不起作用。我使用checkdate功能

    $reservation = explode("-", $_POST['range']);

    if (isset($reservation[0]) && isset($reservation[1])) {
        $from = date('Y-m-d', strtotime($reservation[0]));
        $to   = date('Y-m-d', strtotime($reservation[1]));

        $checkFrom = explode('-', $from);
        $checkTo   = explode('-', $to);

        if (!checkdate($checkFrom[1], $checkFrom[2], $checkFrom[0]) || !checkdate($checkTo[1], $checkTo[2], $checkTo[0])) {
            die('invaild date');
        }
    } else {
        die('invaild date');
    }

3 个答案:

答案 0 :(得分:1)

尝试使用此正则表达式验证日期范围 -

Status

答案 1 :(得分:1)

您的explode()应基于表格中使用的分隔符

$range = $_POST['range'];
$reservation = explode("-", $range);
if(count($reservation) == 2) {
    if(validateDate($reservation[0]) && validateDate($reservation[1])){
        $from        = date('Y-m-d', strtotime($reservation[0]));
        $to          = date('Y-m-d', strtotime($reservation[1]));
    } else {
        //error
    }

} else {
     //error
}

函数已从此answerphp.net

复制

如果您愿意,甚至可以使用date_parse()

答案 2 :(得分:0)

您可以做一件事使该字段是只读的并在该字段上应用所需的验证,因此如果该字段是只读的,则用户只能选择在该字段上应用的日期范围,并且用户无法执行任何操作手动输入,如果用户不选择此项,那么您所需的验证将显示所需的消息。