正则表达式。12小时时间格式PHP仅允许-';g:i A';

正则表达式。12小时时间格式PHP仅允许-';g:i A';,php,regex,Php,Regex,我只是在学习正则表达式——我认为下面的PHP正则表达式是有效的: /^([1-9]|1[012]):([0-5][0-9]) ((A|P)M)$/ 我希望仅在验证时允许以下字符串: 1-12:00-59 AM/PM 为了更好地描述需求,我需要以下PHP日期格式的正则表达式 g:i A 有没有一个好的工具可以用来测试这个正则表达式?有谁有更好的正则表达式供我使用吗?正则表达式不适合解析日期。改为使用PHP的DateTime类(函数by,from): 有很多在线regex测试员你可以在谷歌上搜

我只是在学习正则表达式——我认为下面的PHP正则表达式是有效的:

/^([1-9]|1[012]):([0-5][0-9]) ((A|P)M)$/
我希望仅在验证时允许以下字符串:

1-12:00-59 AM/PM
为了更好地描述需求,我需要以下PHP日期格式的正则表达式

g:i A

有没有一个好的工具可以用来测试这个正则表达式?有谁有更好的正则表达式供我使用吗?

正则表达式不适合解析日期。改为使用PHP的DateTime类(函数by,from):


有很多在线regex测试员你可以在谷歌上搜索。为什么不直接测试你的代码呢。使用应该验证和不应该验证的值运行一些示例,看看您得到了什么。请确保测试边缘情况。我觉得很好,只是您可能不想同时允许
0
12
@ExplosionPills-上午0:30怎么样?午夜三十分钟后?@肉汁那将是凌晨12:30<代码>0-23对于24小时制来说是不错的,但是
0-12
不起作用sense@Gravy:12小时格式从1到12开始,因此
00:30 AM
应无效。+1表示不鼓励使用RegExp。就个人而言,我会使用本机的
date
/
strotime
函数。@matewka是的,您可以使用date/strotime,但我非常赞成在这里使用DateTime。每个PHP开发人员都应该学习和使用这个类(以及相关的类),因为它们提供了更强大的功能/灵活性和基于OO的接口。@AmalMurali-感谢这一点,但是我应该提到,我一直在使用验证类。他们有一个日期验证器,但由于没有很好的时间证明,我选择了正则表达式来解决这个问题。不过,很高兴了解未来。与此同时,我还将试验valitron类-我可能能够设置以下规则:'dateFormat'=>[['appointment\u time','g:I A']],因为它似乎使用了
date\u parse\u from\u format
函数。
function validateDate($date, $format = 'g:i A')
{
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) == $date;
}