正则表达式验证日期,如“Sun,20 Jun 10”

时间:2010-06-18 05:16:30

标签: php regex

我正在处理一个正则表达式,当日期字符串的格式类似于'ddd,dd mmm yy'时,它才会返回true。

有效的匹配值为“Sun,20 Jun 10”或“Mon,21 Jun 10”,但不是“Sunday,20 Jun 10”或“Jun 20”。

这将与PHP中的mb_ereg一起使用。

到目前为止,我的尝试只让我走了一半。任何帮助表示赞赏!

谢谢, 戴夫

3 个答案:

答案 0 :(得分:3)

"/[a-z]{3}, \\d{2} [a-z]{3} \\d{2}/i"

如果不支持i标记(不区分大小写),请将[a-z]替换为[a-zA-Z]

另外,将[a-z]{3}替换为(Sun|Mon|Tue|Wed|Thu|Fri|Sat)和相应的(Month|List)进行更严格的验证。

答案 1 :(得分:1)

这是一个解决方案。像“00”这样的日子是不允许的。

$date = 'Fri, 18 Jun 10';
$regex = '#([A-Za-z]{3}), ((?:0[1-9])|(?:(?:1|2)[0-9])|(?:3(?:0|1))) ([A-Za-z]{3}) ([0-9]{2})#';
preg_match($regex, $date, $matches);

// Create Vars out of the matching...
$day_abbr = $matches[1];
$day = $matches[2];
$month_abbr = $matches[3];
$year = $matches[4];

如果你想允许没有前导零的天数,你将不得不使用这个正则表达式(只是添加了一个问号。这意味着像“Sun,8 Jun 8”这样的日期也适用于以下正则表达式。

$regex = '#([A-Za-z]{3}), ((?:0?[1-9])|(?:(?:1|2)[0-9])|(?:3(?:0|1))) ([A-Za-z]{3}) ([0-9]{2})#';

答案 2 :(得分:0)

我不确定为什么你更喜欢ereg over preg,但是在这里:

$regex = '([A-Z][a-z]{2}), (([012][0-9])|(3[01])|[0-9]) ([A-Z][a-z]{2}) ([0-9]{2})';
mb_ereg($regex, "Sun, 31 Jun 10", $regs);

当然,如果要转换为POSIX时间,则需要将月份部分映射为整数并使用mktime。

相关问题