我有一个简单的代码,可以将测距日期分成两部分。这是:
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');
}
答案 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
}
复制
如果您愿意,甚至可以使用date_parse()
答案 2 :(得分:0)
您可以做一件事使该字段是只读的并在该字段上应用所需的验证,因此如果该字段是只读的,则用户只能选择在该字段上应用的日期范围,并且用户无法执行任何操作手动输入,如果用户不选择此项,那么您所需的验证将显示所需的消息。