检查日期字符串中是否指定了日期


Check whether day is specified in a date string

测试用例场景-用户单击两个链接之一:2012/102012/10/15

我需要知道DAY是否在链接中指定。我已经从我的URL中剥离了其余的链接(除了上面),我正在将值传递给AJAX请求,以更改存档页面上的日期。

我可以在JS或PHP中做到这一点——检查regex /'d{4}'/'d{2}'/'d{2}/是查看是否指定了日期的唯一方法吗?

如果你总是得到这种格式,你也可以这样做:2012/10或2012/10/15

if( str.split("/").length == 3 ) { }

但不能保证的是数字。如果你想确定它们是数字,你确实需要那种正则表达式来匹配字符串。

您可以用"/"分隔符分解日期,然后计算项目数:

$str = "2012/10";
$str2 = "2012/10/5";
echo count(explode("/", $str)); // 2
echo count(explode("/", $str2)); // 3

或者,把它变成一个函数:

<?php
function getDateParts($date) {
  $date = explode("/", $date);
  $y = !empty($date[0]) ? $date[0] : date("Y");
  $m = !empty($date[1]) ? $date[1] : date("m");
  $d = !empty($date[2]) ? $date[2] : date("d");
  return array($y, $m, $d);
}
?>

我个人会使用正则表达式,这是测试这类事情的好方法。或者,您可以在/split/implode字符串,您将有一个由3个字符串组成的数组(希望如此),然后可以对其进行测试。如果我以后要用它的话,我可能会用这个技巧。

最简单、最快的方法是检查字符串的长度!事实上,您需要区分:yyyy/mm/dd(长度为10个字符)和yyyy/mm(长度为7个字符)。

if(strlen($str) > 7) {
    // Contains day
}
else {
    // Does not contain day
}

即使您不使用前导零,这也会起作用!事实上:

2013/7/6 -> 8 characters (> 7 -> success)
2013/7 -> 6 characters (< 7 -> success)

这当然也是最快的代码,因为它不需要PHP对整个字符串进行迭代(就像使用explode()一样)。