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

时间:2015-02-11 13:32:20

标签: javascript regex string

我在新行上有一个带有时间(格式化的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来处理它?<​​/ p>

function checkIfStringConforms(s)
{
  var all_good = [some magic with regex here]
  return all_good;
}
PS:我已经用Google搜索并检查了答案。我的正则表达技巧是......呃。

3 个答案:

答案 0 :(得分:1)

你的正则表达式没问题,但它也匹配29:00,所以它需要一些改进。然后,找到非匹配比找到匹配要困难得多。您可以尝试从字符串中删除所有匹配项,然后查看它是否为空(除了空格):

result = s.replace(/^(?:2[0-3]|[01]?[0-9]):[0-5][0-9]$/mg, "");

如果此后result为空,则表示字符串中没有非法时间。

答案 1 :(得分:1)

可以在不使用任何正则表达式的情况下完成。只需拆分换行,看看每个日期是否与您的格式相符。为此,我们可以使用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 :(得分:1)

/(((2[^0-3]|[3-9].):..)|(..?:[^0-5].))(\n|$)/

如果true var至少有一个无效时间,则regexp会返回s。请在使用前仔细检查 - 您的问题非常广泛,并且没有完全定义限制。正则表达式假设你在每行中都有x:xx或xx:xx(x是一个数字) - 我不确定这个假设是否涵盖了你的所有数据。