我有一个字符串,每一行都有时间(格式为HH:MM)。我想创建一个JS函数来检查是否有不属于的时间。它应该简单地返回true
或false
。
正确字符串示例:var s = "5:45n07:00n13:00n17:00";
5:45
07:00
13:00
下午17:00
错误字符串示例:var s = "5:45n07:00n55:00n17:00";
5:45
07:00
55:00//此处的日期不正确,应返回false
下午17:00
我的正则表达式经验很少。在Scriptular上玩游戏时,我创建了这个表达式来检测匹配的时间:/^[0-2]?[0-9]:[0-5][0-9]$/m
。然而,这还不够。
那么,我如何使用如上所述的字符串s
来实现这一点呢?
function checkIfStringConforms(s)
{
var all_good = [some magic with regex here]
return all_good;
}
PS:我在谷歌上搜索了一下SO的答案。我的正则表达式技能是…嗯。
您的正则表达式还可以,但它也会匹配29:00
,因此需要进行一些改进。然后,找到不匹配的总是比找到匹配的要困难一些。您可以尝试从字符串中删除所有匹配项,然后查看它是否为空(除了空白):
result = s.replace(/^(?:2[0-3]|[01]?[0-9]):[0-5][0-9]$/mg, "");
如果result
在此之后为空,则字符串中没有非法时间。
这可以在不使用任何正则表达式的情况下完成。只需在新行上拆分,看看每个日期是否都符合您的格式。为此,我们可以使用Array.every
function checkIfStringConforms(s) {
return s.split("n").every(function(str){
var arr = str.split(":");
return (arr[0] < 24 && arr[0] > -1) && arr[1] < (60 && arr[1] > -1)
});
}
/(((2[^0-3]|[3-9].):..)|(..?:[^0-5].))(n|$)/
如果您的s
变量至少有一个无效时间,Regexp将返回true
。请在使用前仔细检查——您的问题范围很广,限制还没有完全定义。Regex假设你每行都有类似x:xx或xx:xx的东西(x是一个数字)——我不确定这个假设是否涵盖了你的所有数据。