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

混合

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

  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”)

我的RegEx: / ^(([[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,} $ /

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

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

尝试输入以下内容:1-12、14、16、19、20-29,原为

测试小提琴:http//jsfiddle.net/c9ahfhqy/

是否有关于正则表达式外观的建议?

码:

    $("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");
      }
    }

真的很感谢帮助。

i

正如@derp 所说,您的正则表达式存在灾难性的回溯问题

以下代码似乎可以正常运行,并且不会冻结浏览器:

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

演示版

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

  • 您的正则表达式在尝试1000000个步骤后失败,并显示以下错误:

    您的正则表达式太复杂,无法继续调试。
    您计划使用它的正则表达式引擎可能根本无法处理它并崩溃。
    在帮助文件中查找“灾难性的回溯”,以了解如何避免这种情况。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Angular关闭浏览器窗口/选项卡时执行异步服务获取

切换浏览器选项卡时使光标不选择文本字段

当用户关闭浏览器选项卡时,我想将数据发布到API

我如何从Origin选项卡获取新打开的浏览器选项卡名称?

ec2上的RStudio服务器-关闭浏览器选项卡时不持久

通过匹配浏览器 URL 和选项卡 URL 打开特定选项卡

当用户离开我的站点时如何在浏览器中更改选项卡名称

fullCalendar + Bootstrap选项卡故障:在调整浏览器大小之前不渲染事件

通过输入文件值在新的浏览器选项卡中打开文件

实施JWT存储以允许浏览器刷新但在选项卡/浏览器关闭时清除

是否可以在关闭浏览器/浏览器选项卡时清除所有cookie。在asp.net

WooCommerce:覆盖我帐户页面中“浏览器”选项卡上设置的标题

jsf我可以从bean关闭浏览器选项卡吗?

强制我的网络浏览器在新选项卡上打开链接

我可以使用Spring Security管理多个浏览器选项卡吗?

使我的代码在一个浏览器选项卡上在后台运行

useEffect挂钩,用于在用户关闭浏览器选项卡时保存到localStorage

单击浏览器的“后退”和“前进”按钮时,在页面选项卡之间导航

Primefaces Poll 仅当浏览器选项卡聚焦时

当浏览器选项卡或窗口关闭时,是否会触发一般事件?

关闭浏览器窗口/选项卡时如何删除localStorage项目?

用户切换浏览器选项卡时如何从JApplet隐藏JDialog?

在浏览器选项卡中查询时如何保护GET请求

在Safari浏览器中单击时,bootstrap vue(B选项卡)显示蓝色轮廓

退出浏览器并关闭选项卡时发出警报

用户单击关闭选项卡时如何打开新窗口浏览器?

单击HTML按钮时,在新的浏览器选项卡中打开URL

在Azure Portal中打开新的浏览器选项卡时出现403错误

铬浏览器:打开太多窗口/选项卡时显示“ Aw,snap”