正则表达新手!我想以HH:MM格式验证时间字符串,其中包含可选空格和AM或PM后缀。
示例: 10:30 或 10:30 AM 都有效。
这是我到目前为止失败的原因:
$test = '12:34';
if(!preg_match("/^\d{2}:\d{2}?\s(AM|PM)$/", $test))
{
echo "bad format!";
}
此外,是否可以在同一个正则表达式中验证HH或MM值分别是< = 12和< = 60?
问候,本。
答案 0 :(得分:3)
试试这个:
/^\d{2}:\d{2}(?:\s?[AP]M)?$/
此处最后一部分(?:\s?[AP]M)?
是可选的,non-capturing group,可以以可选的空白字符开头,然后是AM
或PM
。
对于数字范围,请将\d{2}
替换为(?:0\d|1[012])
,将第二(?:[0-5]\d|60)
替换为{{1}}。
答案 1 :(得分:0)
使用正则表达式匹配有效分钟和小时的替代方法,您可以捕获它们,然后使用比较运算符:
$test = '12:14';
if( preg_match("/^(\d{2}):(\d{2})(?:\s?AM|PM)?$/", $test,$m) &&
$m[1] >= 0 && $m[1] < 12 &&
$m[2] >= 0 && $m[2] < 60) {
echo "good format";
} else {
echo "bad format!";
}