我对正则表达式不是很好。我有以下时间:12:00am
。
我需要一个尊重这种格式的 Javascript 正则表达式:hh:mm[am/pm]
var regex = /^(\d\d):(\d\d)\s?(?:AM|PM)?$/;
我对正则表达式不是很好。我有以下时间:12:00am
。
我需要一个尊重这种格式的 Javascript 正则表达式:hh:mm[am/pm]
var regex = /^(\d\d):(\d\d)\s?(?:AM|PM)?$/;
您几乎完成了,缺少的部分是十位数,小时数永远不会大于 1,分钟数永远不会大于 5。我还在末尾添加了“忽略大小写”标志,它接受“am”、“AM”、“Am”、“aM”:
var regex = /^([0-1]\d):([0-5]\d)\s?(?:AM|PM)?$/i;
更严格一点(1 ≤ 小时 ≤ 12):
/^([1-9]|1[0-2]):([0-5]\d)\s?(AM|PM)?$/i
文档:http ://www.javascriptkit.com/javatutors/redev.shtml 。
下面的正则表达式应该可以工作。演示小提琴
var regex = /^([0]\d|[1][0-2]):([0-5]\d)\s?(?:AM|PM)$/i;
/* The below lines are just for demo testing purpose */
var timeStr = ["13:59am","11:59AM","09:69PM", "09:24pm", "09:99pm", "15:23bm", "09:23 AM", "14:74 PM"];
for (i=0; i<timeStr.length; i++)
console.log("Time String: "+timeStr[i]+ " Result: " +regex.test(timeStr[i]));
正则表达式解释:
([0]\d|[1][0-2])
- 用了几个小时。0
后跟任何单个数字(或)后跟1
任何单个数字0-2
(即 0 或 1 或 2)。这是为了确保小时值(如 13 或 14 等)被视为无效(由于我们使用 AM/PM 格式的时间,因此小时值最多只能为 12)。
([0-5]\d)
- 几分钟。之间的任何单个数字0-5
后跟 之间的另一个单个数字0-9
。这是为了确保将 64、79 等分钟值视为无效。
\s?
- 0 或 1 个空格
(?:AM|PM)$/i
- 不区分大小写的 AM 或 PM(即am | pm | Am | Pm | aM | pM | AM | PM
)
控制台输出:
时间字符串:上午 13:59 结果:假 时间字符串:上午 11:59 结果:真 时间字符串:09:69PM 结果:假 时间字符串:09:24pm 结果:真 时间字符串:晚上 9:99 结果:假 时间字符串:15:23bm 结果:假 时间字符串:09:23 AM 结果:真 时间字符串:下午 14:74 结果:假
以下作品我使用 RegExr http://www.regexr.com/3btsp对其进行了测试
/^([0]?[1-9]|1[0-2]):([0-5]\d)\s?(AM|PM)$/i
^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$