Javascript Regex检查字符串是否包含不属于的单词

Javascript Regex Check if string has word that does not belong

本文关键字:不属于 单词 包含 是否 Regex 检查 字符串 Javascript      更新时间:2023-09-26

我有一个字符串,每一行都有时间(格式为HH:MM)。我想创建一个JS函数来检查是否有不属于的时间。它应该简单地返回truefalse

正确字符串示例:var s = "5:45'n07:00'n13:00'n17:00";

5:45
07:00
13:00
下午17:00

错误字符串示例:var s = "5:45'n07:00'n55:00'n17: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是一个数字)——我不确定这个假设是否涵盖了你的所有数据。