当我的RegEx被执行并且不匹配输入时,浏览器选项卡卡住
Browser tab stucks when my RegEx is executed and do not match the input
下一个问题。我创建了一个具有验证的输入字段,这是有效数据:
- 1-12、14、16、22、25-35、41、49、55-90
- 1230- 1992,2001 -2099, 9931
- 1 - 2 13
- 1, 3, 4, 5, 6, 10
基本上,这些数字的任何组合(范围,逗号分隔的范围,逗号分隔的数字,逗号后面有空格,逗号后面没有空格,word: 'all')
我的正则表达式:/^ (([0 - 9] {0, 4}, {0} ' s) + ([0 - 9] {1 4} [0 - 9] {1 4}) {0}, ? ' s{0}) + $ | ^(全部)$ | ^ ([0 - 9]{1 4}[0 - 9]{1 4}){0},?美元' s {0}/
它工作得很好,只有一个主要问题。
当我开始打字时,在一些逗号分隔的数字之后,我添加了一些无效的东西,比如字符:'abc' -此时我的浏览器选项卡卡住了。
测试: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所说,你的regex有灾难性回溯的问题。
下面这个似乎可以像你想要的那样工作,并且不会冻结浏览器:
/^(?: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步后失败,没有错误
相关文章:
- location.reload(true)崩溃浏览器选项卡
- 如何在现有的浏览器选项卡中打开url
- 在用户关闭/更改移动浏览器选项卡之前进行检测
- 在新的浏览器选项卡上加载新的aspx页面后调用JavaScript函数
- 询问用户何时尝试关闭浏览器选项卡
- 自动关闭或覆盖通过命令行打开的浏览器选项卡
- 在两个浏览器选项卡之间共享变量范围
- 检查具有特定标题的浏览器选项卡是否已存在
- 如何防止用户使用浏览器选项禁用脚本
- 检测通过移动 Safari 中的 JavaScript 关闭浏览器选项卡
- 当用户关闭浏览器选项卡时,如何使用 PHP 或 javascript 从我的站点注销用户
- 在单击浏览器选项卡上调用 js 函数
- 在 JavaScript 中识别浏览器选项卡的任何方法
- 如何使setInterval在浏览器选项卡处于焦点时运行
- 如何:让javascript在浏览器选项卡更改时运行
- 将键盘和鼠标事件从一个浏览器选项卡发送到另一个
- Node.js,并将数据发送回所有浏览器选项卡
- 如何设置浏览器选项卡's锚定目标名称
- 自定义Div滑块运行过快,但仅当从另一个浏览器选项卡返回时
- 有没有任何方法可以通过编程将浏览器选项卡放在前面(跨浏览器)