我正在处理一个正则表达式,当日期字符串的格式类似于'ddd,dd mmm yy'时,它才会返回true。
有效的匹配值为“Sun,20 Jun 10”或“Mon,21 Jun 10”,但不是“Sunday,20 Jun 10”或“Jun 20”。
这将与PHP中的mb_ereg一起使用。
到目前为止,我的尝试只让我走了一半。任何帮助表示赞赏!
谢谢, 戴夫
答案 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。