接下来的问题。我创建了一个具有验证的输入字段,这是有效的数据:
基本上,这些数字的任意组合(范围,逗号分隔的范围,逗号分隔的数字,逗号后的空格,逗号后的空格,单词:“ 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");
}
}
真的很感谢帮助。
以下代码似乎可以正常运行,并且不会冻结浏览器:
/^(?: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] 删除。
我来说两句