在php中创建一个函数,检查get value的顺序是否为dd/mm/yyy

在php中创建一个函数,检查get value的顺序是否为dd/mm/yyy,php,Php,我目前正在构建一个房间预订系统,想知道如何检查用户是否以正确的英国格式dd/mm/yyyy输入了日期(获取值) $uk_date = $_GET["date"]; 例如,避免用户在2012年12月或2012年键入或使用不正确的分隔符 提前谢谢 最好是: 如果解析成功,那么您手中就有一个提供许多有用函数的对象。其中最重要的一个是,它可以让您从对象中获取数据,例如: $year = $date->format('Y'); 使用如下的正则表达式代码: $str = '12/12/2012';

我目前正在构建一个房间预订系统,想知道如何检查用户是否以正确的英国格式dd/mm/yyyy输入了日期(获取值)

$uk_date = $_GET["date"];
例如,避免用户在2012年12月或2012年键入或使用不正确的分隔符

提前谢谢

最好是:

如果解析成功,那么您手中就有一个提供许多有用函数的对象。其中最重要的一个是,它可以让您从对象中获取数据,例如:

$year = $date->format('Y');

使用如下的正则表达式代码:

$str = '12/12/2012';
$regex = '#^\d{1,2}([/-])\d{1,2}\1\d{4}$#';
if (preg_match($regex, $str, $m))
   echo "valid date\n";

请尝试以下正则表达式:

$pattern = '|^[\d]{,2}/[\d]{,2}/[\d]{,4}$|is';
if (preg_match($pattern, $date, $match)) {
  echo 'ok!';
}
尝试此功能:

public static function CheckValidDate($sDate) {
    $sDate = str_replace('/', '-', $sDate);
    preg_match('/^(\d{2})-(\d{2})-(\d{4})$/', $sDate, $xadBits);
    if ($xadBits)
      return checkdate($xadBits[2], $xadBits[1], $xadBits[3]);
    else
      return false;
}
访问参考资料:


如果他有非常新的PHP版本,感谢@SalmanA

的评论。这在很多共享主机上都不是一个选项。(PHP5>=5.3.0)@Endijs:我正在提供我能提供的最佳答案。如果OP不能使用它(我不会在这里讨论),他们可以这样说,然后我们可以提供替代方案。另外,仅供参考PHP5.3.0,我不会称之为“非常新鲜”。哎哟。。。似乎它修复了无效的值。无效的英国日期
12/13/2012
更改为
2013-01-12
@Jon:我希望我没有冒犯你。我只是添加了评论,这样就不会出现类似“我试过了,但这不起作用”这样的后续评论。@SalmanA:编辑了答案,以展示如何防范这种情况。感谢您指出。它是否能够区分2012年1月1日、2012年1月1日和2012年1月1日的格式?它还将返回
99-99-2012
@SalmanA的“有效日期”:OP的问题不是验证日期。例如,根据OP
,避免用户在2012年12月或2012年键入或使用不正确的分隔符。
如果需要日期验证,则需要额外调用
checkdate
即可。与上述问题相同-是否能够区分2012年1月1日的格式,例如,2012年1月1日2012年1月1日?@CJS是的,我编辑了代码,现在它可以很好地适用于您的所有示例Fantastic!非常感谢你!我这样做是为了检查$date是否不匹配,但它是否不工作(使用!preg_match而不是preg_match)
if(!preg_match($pattern,$date,$match)){echo'error date format';exit;}
+1用于使用checkdate(注意:不要忘记检查preg_match是否返回true或$xadBits是否不为null)。多种方法。例如,使用“/”分解(),然后使用checkdate()。它必须是GET值吗?将POST值与类似的内容结合使用会更简洁,您可以在其中设置所需的格式。将其设置为只读,用户除了使用格式之外别无选择。
public static function CheckValidDate($sDate) {
    $sDate = str_replace('/', '-', $sDate);
    preg_match('/^(\d{2})-(\d{2})-(\d{4})$/', $sDate, $xadBits);
    if ($xadBits)
      return checkdate($xadBits[2], $xadBits[1], $xadBits[3]);
    else
      return false;
}