gpt4 book ai didi

javascript - 当我的 RegEx 被执行并且与输入不匹配时,浏览器选项卡卡住

转载 作者:数据小太阳 更新时间:2023-10-29 04:44:08 29 4
gpt4 key购买 nike

接下来就是问题了。我创建了一个具有验证的输入字段,这是有效数据:

  1. 1-12、14、16、22、25-35、41、49、55-90
  2. 1230-1992, 2001-2099, 9931
  3. 1-2
  4. 13
  5. 1,3,4,5,6,10
  6. 全部

基本上,这些数字的任意组合(范围、逗号分隔的范围、逗号分隔的数字、逗号后的空格、逗号后没有空格、单词:'all')

我的正则表达式:/^(([0-9]{0,4},?\s{0,})+([0-9]{1,4}-[ 0-9]{1,4}){0,},?\s{0,})+$|^(全部)$|^([0-9]{1,4}-[0-9] {1,4}){0,},?\s{0,}$/

它几乎可以正常工作,只有 1 个主要问题。

当我开始输入时,在一些逗号分隔的数字之后添加了一些无效的内容,例如字符:'abc' - 此时我的浏览器选项卡卡住了。

试试这个作为输入:1-12, 14, 16, 19, 20-29, was

要测试的 fiddle :http://jsfiddle.net/c9ahfhqy/

对于正确的 RegEx 应该是什么样子有什么建议吗?

代码:

    $("input[type='text']").blur(function() { //when you lose focus on input
doneTyping();
});

function doneTyping() {
if(!$('#inputToCheck').val().match(/^(([0-9]{0,4},?\s{0,})+([0-9]{1,4}\-[0-9]{1,4}){0,},?\s{0,})+$|^(all)$|^([0-9]{1,4}\-[0-9]{1,4}){0,},?\s{0,}$/)) {
console.log("Not Valid");
} else {
console.log("Valid");
}
}

非常感谢帮助。

最佳答案

作为@derp said ,你的正则表达式有一个问题 Catastrophic Backtracking .

下面的看起来像你想要的那样工作,并且不会卡住浏览器:

/^(?:all|\d{1,4}(?:-\d{1,4})?(?:,\s*\d{1,4}(?:-\d{1,4})?)*)$/

Demo

使用 RegexBuddy 的调试器测试 1-12, 14, 16, 19, 20-29, was,

  • 您的正则表达式在尝试 1000000 步后失败,出现以下错误:

    Your regular expression is too complex to continue debugging.
    The regex engine you plan to use it with may not be able to handle it at all and crash.
    Look up "catastrophic backtracking" in the help file to learn how to avoid this situation.

  • 上面的正则表达式在 96 步后失败,没有错误。

关于javascript - 当我的 RegEx 被执行并且与输入不匹配时,浏览器选项卡卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25433413/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com