当前位置:编程学习 > php >>

PHP判断日期格式和时间是否正确合法的函数代码正则表达式

 

<?php  
/*** 方法:isdate()* 功能:判断日期格式是否正确* 参数:$str 日期字符串 $format日期格式* 返回:布儿值*/ 
function isdate($str,$format="Y-m-d"){ 
$strArr = explode("-",$str); 
if(empty($strArr)) 
{return false;} 
foreach($strArr as $val) 
{if(strlen($val)<2) 
{$val="0".$val;}$newArr[]=$val;} 
$str =implode("-",$newArr);  
$unixTime=strtotime($str);  
$checkDate= date($format,$unixTime);  
if($checkDate==$str)  
return true;  
else  
return false;} 
//实例 
if(isdate("2010-1-1")) 
{echo "true";} 
else 
{echo "false";} 
echo"<br/>"; 
if(isdate("asdfsdaf")) 
{echo "true";}else{echo "false";} 
?> 

=============================================

php检查是否为一个合法的时间格式正则
下面总结了几种利用php来验证用户输入的日期是不是正确的日期哦,有需要的朋友可参考参考。


checkdate() 函数验证一个格里高里日期。
例子

<?php
var_dump(checkdate(12,31,2000));
var_dump(checkdate(2,29,2003));
var_dump(checkdate(2,29,2004));
?>输出:
bool(true)
bool(false)
bool(true)
正则日期
例1
/**

* 检查是否为一个合法的时间格式
*
* @param string $time
* @return void
*/
function is_time($time)
{
$pattern = '/[d]{4}-[d]{1,2}-[d]{1,2}s[d]{1,2}:[d]{1,2}:[d]{1,2}/';
return preg_match($pattern, $time);
}
例2
正则验证日期
 代码如下 复制代码
$reg="/d{4}-d{2}-d{2}/";
preg_match($reg,$days,$arr);
print_r($arr);

===============================

PHP判断一个日期时间是否有效 


preg_match("/^[0-9]{4}(\-|\/)[0-9]{1,2}(\\1)[0-9]{1,2}(|\s+[0-9]{1,2}(|:[0-9]{1,2}(|:[0-9]{1,2})))$/",$time)
以上匹配表达式使得如下格式日期都成立:
0000-00-00
0000/00/00
0000-00-00 00
0000/00/00 00
0000-00-00 00:00
0000/00/00 00:00
0000-00-00 00:00:00
0000/00/00 00:00:00
对次表达式的分析:
/^[0-9]{4}(\-|\/)[0-9]{1,2}(\-|\/)[0-9]{1,2}(|\s+[0-9]{1,2}(|:[0-9]{1,2}(|:[0-9]{1,2})))$/
/是表达式开始符 最后面的/是表达式的结束符
^字符串的开始,即以***开始
$表示字符串的结尾,即表示已***结尾
|表示或者
()表示一个单元
[0-9]{4}匹配一个4位数,
(\-|\/)匹配一个“-”号或者一个“/”号,
[0-9]{1,2}匹配一个1位数或者2位数,
(\ \1)表示第一个括号里的内容,第一个括号,即(\-|\/)
那么合起来解释,前一部分:^[0-9]{4}(\-|\/)[0-9]{1,2}(\\1)[0-9]{1,2}匹配年月日
是已一个4位有效数字开始,后面跟2个2位数字,3个数字间用“-”或者“/”分割
这 里要注意,:^[0-9]{4}(\-|\/)[0-9]{1,2}(\\1)[0-9]{1,2}和:^[0-9]{4}(\-|\/)[0-9] {1,2}(\-|\/)[0-9]{1,2}是不一样的,区别在于:2个分割符前者只能有1种分割符,“-”或者“/”,后者则可以有2种,即2个位置 的分割符可以不一样,比如:2008-11/24这个日期在前一种匹配模式下不成立,在后者的匹配模式下成立
(|\s+ [0-9]{1,2}(|:[0-9]{1,2}(|:[0-9]{1,2})))这个被一个括号括起,表示整体是一个单元,内部有多个“|”符号,这个 符号要看其左右2边,左边第一个“|”的左边是空,右边是\s+[0-9]{1,2}(|:[0-9]{1,2}(|:[0-9]{1,2})),表示: 要么为空,要么匹配\s+[0-9]{1,2}(|:[0-9]{1,2}(|:[0-9]{1,2}));
\s+匹配一个或多个空格, 这个位置正是年月日和时分秒之间的分割;
[0-9]{1,2}匹配一个1位或者2位的数字 ,这个位置正是小时;
上面连起来就是如果存在时分秒,则必定以有空格和小时数,
(|:[0-9]{1,2}(|:[0-9]{1,2}))后面解释其实同上 ,合起来就是,如果存在时分数,则必定有“:”和时分值,如果存在秒数,则必定有“:”和秒数
因为最后2个时分数秒数的形式完全一样,所以可以进一步缩短代码:
Copy code
preg_match("/^[0-9]{4}(\-|\/)[0-9]{1,2}(\\1)[0-9]{1,2}(|\s+[0-9]{1,2}(:[0-9]{1,2}){0,2})$/",$time)

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,