我正在尝试使用PHP验证日期。

我希望以下格式有效:

d/m/yy

d/m/yyyy

dd/m/yy

dd/m/yyyy

d/mm/yy

d/mm/yyyy

dd/mm/yy

dd/mm/yyyy

我尝试了许多正则表达式和checkdate()函数的不同变体。 目前我有这样的事情:

function _date_is_valid($str)

{

if(strlen($str) == 0)

return TRUE;

if(substr_count($str,'/') == 2)

{

if (preg_match("/^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)?\d{2})|(29\/0?2\/(((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))|(0?[1-9]|1\d|2[0-8])\/((0?[1-9])|(1[0-2]))\/((1[6-9]|[2-9]\d)?\d{2}))/", $str))

{

$datearray = explode('/',$str);

if($datearray[2] > 2030)

return FALSE;

return checkdate($datearray[1], $datearray[0], $datearray[2]);

}

else

{

return FALSE;

}

}

return FALSE;

}

但是,这会验证日期,例如11/11/200和11/11/200#

如何验证日期以匹配所需格式?

编辑:我可以检查datearray [2]在10到30与2010和2030之间。但是有没有办法使用正则表达式检查它?

Edit1:在strlen($ str)== 0上返回TRUE是因为我希望用户能够添加事件而不知道事件何时发生,以便其他人可以限定时间表并将事件分配给以后的某个日期

仅作记录。 我最终做了:

function _date_is_valid($str)

{

if(strlen($str) == 0) //To accept entries without a date

return TRUE;

if(substr_count($str,'/') == 2)

{

list($d,$m,$y) = explode('/',$str);

if(($y >= 10 && $y <= 30) || ($y >= 2010 && $y <= 2030))

{

return checkdate($m,$d,$y);

}

}

return FALSE;

}

谢谢你的回答

function _date_is_valid($str) {

if (substr_count($str, '/') == 2) {

list($d, $m, $y) = explode('/', $str);

return checkdate($m, $d, sprintf('%04u', $y));

}

return false;

}

应该是checkdate(),而不是check_date()。除此之外,对我来说看起来不错。 +1

如果您不检查/的计数,它将在无效字符串上抛出php通知或警告

我对它进行了一些修改,以不验证某些年份后的日期,因为php checkdate()验证了像20111这样的年份,在这种情况下,这不是我想要的

如果没有两个分隔的怎么办?

@antpaw和Gumbo:修复它,谢谢。

如果它将始终是日期/月份/年份,则可以使用checkdate:

function _date_is_valid($str)

{

$array = explode('/', $str);

$day = $array[0];

$month = $array[1];

$year = $array[2];

$isDateValid = checkdate($month, $day, $year);

return $isDateValid;

}

应该是checkdate(),而不是check_date()。您可能想要对$ array索引执行isset()。除此之外,对我来说看起来不错。 +1

哦,是的,您是对的,它是checkdate(),是从问题中复制而未选中它的。谢谢

如果没有两个分隔的怎么办?

一种简单的方法

if(!$formated_date = date_create_from_format('Y-m-d',$dateVar))

你是一颗星星,这对我很有帮助。

尝试这个:

function _date_is_valid($str) {

if (strlen($str) == 0) {

return TRUE;

}

return preg_match('/^(\d{1,2})\/(\d{1,2})\/((?:\d{2}){1,2})$/', $str, $match) && checkdate($match[2], $match[1], $match[3]) && $match[2] <= 2030;

}

为什么返回TRUE?

我想允许日期保留为空或有效格式。它是一种事件日历,您可以在其中预订特定日期的事件或预订事件,然后其他人将日期分配给它

不检查日期或月份是否有效。

@Douglas Leeder:checkdate检查有效日期。

抱歉-没有注意到水平滚动。 preg_match适合显示的宽度。

我所做的验证很简单

function dateValidate($pDate) {

if(empty($pDate))

return true;

$chDate = date('Y-m-d', strtotime($pDate));

if($chDate != '1970-01-01')

return true;

else

return false;

}

您也可以使用regexp找到它

我只是在更改上面的马丁答案,它将验证任何类型的日期并以您喜欢的格式返回。

只需通过在脚本strftime(" 10-10-2012",strtotime($ dt))的行下方进行编辑即可更改格式。

echo is_date("13/04/10");

function is_date( $str )

{

$flag = strpos($str, '/');

if(intval($flag)<=0){

$stamp = strtotime( $str );

}else {

list($d, $m, $y) = explode('/', $str);

$stamp = strtotime("$d-$m-$y");

}

//var_dump($stamp) ;

if (!is_numeric($stamp))

{

//echo"ho" ;

return"not a date" ;

}

$month = date( 'n', $stamp ); // use n to get date in correct format

$day   = date( 'd', $stamp );

$year  = date( 'Y', $stamp );

if (checkdate($month, $day, $year))

{

$dt ="$year-$month-$day" ;

return strftime("%d-%b-%Y", strtotime($dt));

//return TRUE;

}else {

return"not a date" ;

}

}

?>

if(strtotime($str) !== FALSE) $valid = TRUE;怎么样

-1:OP非常明确地接受哪种格式。您的解决方案支持更多格式。

并且在dd / mm / yyyy和mm / dd / yyyy之间也存在问题

php验证年月日的正则表达式,关于正则表达式:在php中验证日期格式相关推荐

  1. python正则表达式提取电话号码区号_python中的正则表达式,用于从剪贴板中提取特定格式的电话号码...

    我一直在尝试做一个个人项目(project1的一个专门版本,来自Python自动化枯燥的东西,但特别是在我国提取这种格式的电话号码) 可接受的格式为: 手机号码- (+91或91)可选,可以用括号括起 ...

  2. 如何在JavaScript中验证电子邮件地址

    如何在JavaScript中验证电子邮件地址? #1楼 与squirtle相比 ,这是一个复杂的解决方案,但是在正确验证电子邮件方面做得非常出色: function isEmail(email) { ...

  3. html正则表达式确认密码,如何使用正则表达式在流星中验证确认密码

    我使用meteor开发我的应用程序.我需要验证我的注册表单,以便限制用户.现在,我在我的注册表单中输入密码并确认密码.我正在使用正则表达式进行验证.如何使用正则表达式在流星中验证确认密码 我的代码是: ...

  4. 如何在Java中验证电话号码(正则表达式+ Google libphonenumber)

    关于如何在不同国家(例如美国,美国)使用Java验证电话号码的快速指南. 带有正则表达式和Google libphonenumber API的示例程序. 1.简介 在本教程中,我们将学习如何在java ...

  5. 手机号正则表达式验证_还不会正则表达式?看这篇!

    前言 正则表达式是很多程序员,甚至是一些有了多年经验的开发者薄弱的一项技能.大家都很多时候都会觉得正则表达式难记.难学.难用,但不可否认的是正则表达式是一项很重要的技能,所有我将学习和使用正则表达式时 ...

  6. 请尝试写一个验证Email地址的正则表达式。版本一应该可以验证出类似的Email —— python学习笔记

    Python正则表达式的练习 1.1 请尝试写一个验证Email地址的正则表达式.版本一应该可以验证出类似的Email someone@gmail.com bill.gates@microsoft.c ...

  7. java中验证18位身份证的正则表达式

    import java.util.regex.Matcher; import java.util.regex.Pattern; /** *只可以验证输入的身份证是否为18位,不可以验证身份证的正确性 ...

  8. python用正则表达式判断字符串_使用Python验证常见的50个正则表达式

    什么是正则表达式? 正则表达式(Regular Expression)通常被用来检索.替换那些符合某个模式(规则)的文本. 此处的Regular即是规则.规律的意思,Regular Expressio ...

  9. 手机号正则表达式html,js 获取input的value值及验证手机号和汉字的正则表达式

    在项目中经常遇到需要验证输入内容的情况,可以通过 Javascript 判断输入内容,验证手机号或者是否为汉字. 简单的记录一下: HTML部分: 提交 js 部分: 首先获取到元素:var unam ...

  10. 记一种验证日期格式的正则表达式

    工作中经常需要对用户输入的日期进行验证,常用的方式是使用正则对格式进行验证.比如如下: 一.简单的日期判断(YYYY/MM/DD): ^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$ ...

最新文章

  1. Web中的积累:外观模式 Facade
  2. 机器大神 Michael Jordan 教授主题演讲:机器学习——创新视角,直面挑战》
  3. RK1109 RK1126等芯片来袭,2020年瑞芯微旗下SoC一览
  4. iOS app 企业内部发布及HTTPS服务器配置
  5. 第一季4:Hi3518E_SDK_Vx.x.x.x的SDK目录结构
  6. Java笔记-SM3(国密3)和SM4(国密4)的使用
  7. one-hot与词袋模型
  8. ofbiz 分开默认数据库
  9. JS --- this(4)
  10. 1小时学会jenkins集成邮件/微信/钉钉通知
  11. 2013-2017蓝桥杯省赛C++A组真题总结(题型及解法)
  12. “网页上有错误”的解决方法
  13. 6个常用的Python编程开发工具
  14. CentOS操作系统的22个log日志
  15. 学习记录:python快递价格计算器练习7.12
  16. html用百度网盘怎么看,百度网盘怎么使用?别人给了我一串字母
  17. Qt实现 基于ffmpeg拉流播放视频
  18. MATLAB系列笔记:修改编辑器颜色为护眼色(绿豆沙)
  19. springboot大纲
  20. HTML基础之常用标签第二篇:有序无序标签,以及框架标签

热门文章

  1. datagrid中巧用loadFilter对数据整形
  2. JAVA中的Font
  3. centos 服务详解
  4. c# BackgroundWorker组件介绍(属性、方法、事件)
  5. 运维笔记--ubuntu安装指定版本的RabbitMQ
  6. gcd(辗转相除法)
  7. 动态路由协议RIP的基本原理与配置
  8. Java常用的集合类
  9. .NET Core类库项目中如何读取appsettings.json中的配置
  10. 【Android开发—智能家居系列】(四):UDP通信发送指令