【问题标题】:Validating expiration date in php在php中验证到期日期
【发布时间】:2020-05-30 15:19:07
【问题描述】:

我正在尝试验证用户在 PHP 中输​​入的信用卡到期日期。这是我目前所拥有的:

if (!isset($_POST["cardDate"])) {
        header("location:payment.php");
        exit();
    }
    else {
        $cardDate=$_POST["cardDate"];

        if ($cardDate=="") {
        $err_msg .="<p>Please enter the credit card expiration date.</p>";

    }   
    else {
        if (!preg_match("/^(0[1-9]|1[0-2])[-][0-9]{2}$/", $cardDate)) {
           $err_msg .= "<p>The expire date format is not correct!</p>";

        }
        else {
            $currentDate = date('m/y');
            $exp = strtotime($cardDate);
            $current = strtotime($currentDate);
            if ($current>$exp) {
                $err_msg .= "<p>Credit card has expired";
            }
        }
    }
    }

代码当前不起作用,我认为这是因为用户将以“mm-yy”格式输入到期日期,我不确定代码的 $currentDate 部分是否传达了该消息。是否有人对需要更改哪些内容以使 PHP 验证到期日期有任何建议?输入日期的示例是 05/19 或 11/20。然后,代码将通过将其与今天的日期(即 05/20)进行比较来匹配 05/19 或 11/20 是否已经过去。卡的到期日期必须在当前日期之后。 HTML 代码

<p><label for="cardDate">Credit card expiration date</label>
<input type="text" name="cardDate" id="cardDate" maxlength="5" size="5" required="required" placeholder="mm-yy" /></p>

【问题讨论】:

  • 你能给我们看看user input的例子吗?那个月份有前导零吗?
  • @HarishST 我已经编辑了问题以包含一个示例和我的相关 HTML 代码。
  • 只有月份和年份?没有日期?
  • @HarishST 是的,只有月份和日期,格式为 mm-yy

标签: php


【解决方案1】:

试试这个,使用 PHP DateTime 类。 请注意,您应严格确保用户输入的格式有效。

来自 PHP 文档:

如果区间表示负时间段,则反转为 1,而 0 否则。

$userInput = '05-20'; // Example User input
$cardDate = DateTime::createFromFormat('m-y', $userInput);

$currentDate = new DateTime('now');
$interval = $currentDate->diff($cardDate);

if ( $interval->invert == 1 ) {

    // Expired
    echo "Expired\n";
}
else {
    // Valid
    echo "Valid\n";
}

使用以下文档了解更多信息:

PHP DateTime

【讨论】:

  • 这似乎只是检查输入的月份以及预定义的输入。如果输入来自表单并且还需要检查年份怎么办?我是否只需添加另一行,例如 if ($interval->y)>0 ?
  • 您好,代码有错误。我会更新答案。
  • 我已经更新了答案。请检查并让我知道结果。感谢您指出这一点!
  • 非常感谢您更新您的答案。现在效果更好了。但是,我有最后一个查询。如果用户输入 05-20,则应该说卡已过期,因为它已经是 05-20(2020 年 5 月)。有什么办法可以更新您的代码来做到这一点?
  • 确定吗?假设当前日期是 01-05-2020,用户输入日期 05-2020。那么它应该过期吗?不过,我会为此更新代码。
猜你喜欢
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
相关资源
最近更新 更多