PHP DD / MM / YYYY验证

时间:2015-08-07 06:38:10

标签: php validation date

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

这不是重复,我尝试了其他线程,但没有一个解决方案有效。

3 个答案:

答案 0 :(得分:7)

您应该使用的不仅仅是正则表达式。例如,您不应该允许 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 的正式有效性,抓取 DD MM YYYY 分成$matches数组。然后使用内置的PHP函数checkdate检查日期本身的有效性。

您可以在代码中使用它,例如:

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

答案 1 :(得分:4)

你可以在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

答案 2 :(得分:0)

给定字符串string_explode然后将其部分传递给

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

很遗憾,如果日期不超过12

,您无法知道用户是否以格式发布了月份和日期