PHP DD/MM/YYYY 验证

5

很抱歉,这可能是一个简单的问题,但我是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>';
  }

这不是重复问题,我尝试了其他帖子但它们的解决方案都没用。

如果您使用<input type="date">,浏览器不应该为您完成吗? - Pancake_M0nster
3个回答

16

您应该使用比正则表达式更多的内容。例如,您不应该允许像31/02/2015这样的日期,因为在二月中没有31号

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

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 - Krono

1

string_explode将字符串分割并将其部分传递给

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

很不幸,如果日期小于等于12日,则无法确定用户是否以您的格式发布了月份和日期。


人们说,应该使用客户端验证,因为仅为此向服务器发送数据是昂贵的。是的!你应该在客户端进行验证,但无论如何,在某些“有趣”的人玩弄时,你仍然需要验证服务器接收到的内容。 - zakius

1
您可以在PHP中像这样做:

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

如果 "/" 后面的三个值无效或者没有 "/", checkdate函数将返回false,就像输入错误的数字顺序一样。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接