【问题标题】:i want create date validation but not know why return is false?我想创建日期验证但不知道为什么返回是假的?
【发布时间】:2011-10-07 18:53:21
【问题描述】:

我想创建日期验证但不知道为什么返回为假?

$data_go = '2011/04/28';
$ddmmyyy='(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](19|20)[0-9]{2}';
            if(preg_match("/$ddmmyyy$/", $data_go)) {
               return TRUE;
            }else {
              return FALSE;
            }

【问题讨论】:

  • 尝试从字符串中取出变量 $ddmmyyy 以避免在不记得有变量时与正则表达式混淆。

标签: php codeigniter validation date


【解决方案1】:

以下正则表达式匹配您的日期和其他类似的日期。

([1-9][\d]{3})[- \/.]([0-1][\d])[- \/.]([0-3][\d])

解释

第一组 ([1-9][\d]{3}) 是年份,允许范围为 1000 到 9999

第二组 ([0-1][\d]) 是月份,允许范围为 00 到 19(显然它不会捕获坏月份)

第三组([0-3][\d]) 是日期,允许范围为 00 到 39(同样,它不会捕捉到糟糕的日子)

一旦你有了这些部分,你就可以使用比正则表达式更合适的工具进行显式验证,或者只使用 DateTime 对象开始,而不是重新发明轮子。

【讨论】:

  • 如何分别对年、月、日进行日期验证?
  • 我添加了正则表达式的解释
【解决方案2】:

您是否尝试匹配所有可能的日期?正如@nomulous 指出的那样,该模式匹配 mm/dd/yyyy,而不是 yy/mm/dd。为了简单起见,我会使用 checkdate 来验证日期,并使用 \d 代替 [0-9]。

【讨论】:

  • 如何分别对年、月、日进行日期验证?
【解决方案3】:

我对正则表达式不太熟悉(我感到羞耻),但您始终可以使用 checkdate() 方法来验证日期服务器端。

在你的情况下,你这样做:

if (strpos($data_go, "/") !== false) {
    $date_exploded = explode("/", $data_go);
    if (checkdate($date_exploded[1], $date_exploded[2], $date_exploded[0])) {
        return TRUE;
    } else {
        return FALSE;
    }
} else {
    return FALSE;
}

【讨论】:

  • 如何分别对年、月、日进行日期验证?
  • 为什么要单独验证它们?
  • 如果输入的年、月、日输入错误,则返回 false。如果输入的日期少于现在输入的日期(日期提交),则返回 false。怎么样?
  • 如果您还想比较日期,请查看mktime & strtotime
【解决方案4】:

因为您的日期是 yyyy/mm/dd,而您的正则表达式是 dd/mm/yyyy。

【讨论】:

    猜你喜欢
    • 2013-08-23
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多