【问题标题】:PHP DD/MM/YYYY Validation [duplicate]PHP DD/MM/YYYY 验证 [重复]
【发布时间】:2015-10-30 12:18:43
【问题描述】:

抱歉可能是一个简单的问题,但我是 PHP 和 Javascript 的新手。

我正在 PHP 中创建一个登录验证,它要求注册用户以 DD/MM/YYYY 格式输入他们的出生日期,如果以任何其他格式输入日期,则会返回错误消息。除了使用 preg_match 之外,我不确定如何执行此操作,但这似乎不起作用...

变量:

$DOB = $_POST['DOB'];
$error_message = '';

日期验证段

elseif (!preg_match("/^(0?[1-9]|[12][0-9]|3[01])\/\.- \/\.- \d{2}$/", $DOB))
{
  $error_message = 'Invalid Date';
}

错误显示

  if ($error_message != '')
  {
    echo 'Error: '.$error_message.' <a href="javascript: history.back();">Go Back</a>.';
    echo '</body> </html>';
    exit;
  }
  else
  {
   echo'<p><strong>Form Submitted Successfully!</strong></p>';
  }

这不是重复的,我尝试了其他线程,但他们的解决方案都没有奏效。

【问题讨论】:

  • 如果您使用&lt;input type="date"&gt;,浏览器不应该为您这样做吗?

标签: php validation date


【解决方案1】:

string_explode 给定字符串,然后将它的一部分传递给

bool checkdate ( int $month , int $day , int $year )

很遗憾,如果日期不大于 12,您无法知道用户是否以您的格式发布月份和日期

【讨论】:

  • 人们说您应该使用客户端验证作为向服务器发送数据只是因为这很昂贵是的!你应该验证客户端,但无论如何你必须验证服务器收到的内容,以防一些“有趣”的人在玩
【解决方案2】:

您不应该使用正则表达式。例如,您不应该允许像 31/02/2015 这样的事情,因为 2 月 没有 31th

我有一个运行良好的函数:

function isDate($string) {
    $matches = array();
    $pattern = '/^([0-9]{1,2})\\/([0-9]{1,2})\\/([0-9]{4})$/';
    if (!preg_match($pattern, $string, $matches)) return false;
    if (!checkdate($matches[2], $matches[1], $matches[3])) return false;
    return true;
}

它首先使用preg_match检查DD/MM/YYYY的形式有效性,抓取DDMMYYYY 部分到 $matches 数组中。然后它使用内置的PHP函数checkdate检查日期本身的有效性。

你可以在你的代码中使用它:

if (!isDate($DOB)) {
    $error_message = 'Invalid Date';
}

【讨论】:

  • 这非常有效!谢谢大家的帮助:D
【解决方案3】:

你可以在 PHP 中这样做:

$date=explode("/",$_POST['DOB']);
if(checkdate ($date[1] ,$date[0] ,$date[2]))
{
    echo "valid";
}
else 
{
    echo "invalid";
}

checkdate 只会在 "/" 后面的三个值有效时返回 true,所以如果没有 "/" 则无效,就像他们把数字按错误的顺序一样。

查看手册http://php.net/manual/en/function.checkdate.php

【讨论】:

    猜你喜欢
    • 2012-05-05
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 2016-12-16
    相关资源
    最近更新 更多