var str = 'aaaaaaaaaabbbbbbbbbbcccccccccc(';
// 运行下面代码,浏览器会卡死,为何?
if (!/^\s*[a-zA-Z0-9]+(\s*[a-zA-Z0-9]+)*\s*$/.test(str)) {
alert('请输入英文');
}
// 奇怪的现象:如果把字符串中 cccccccccc 去掉,就没事了,怎么回事?
补充下需求:只允许内容是【字母、数字、空格】组合,但不能全部都是空格。
var str = 'aaaaaaaaaabbbbbbbbbbcccccccccc(';
// 运行下面代码,浏览器会卡死,为何?
if (!/^\s*[a-zA-Z0-9]+(\s*[a-zA-Z0-9]+)*\s*$/.test(str)) {
alert('请输入英文');
}
// 奇怪的现象:如果把字符串中 cccccccccc 去掉,就没事了,怎么回事?
补充下需求:只允许内容是【字母、数字、空格】组合,但不能全部都是空格。
问题出在(s[a-zA-Z0-9]+)这里,这种形式需要回溯次数指数上升,回溯太多次了,所以卡死。把ccccccc去掉后就没事是因为长度减少后,回溯次数也相应减少,所以不会卡死。Python中执行re.match(r'^([a-zA-Z0-9]+)*$', 'aaaaaaaaaabbbbbbbbbbcccccccccc(')
就可以看到卡死了。深入了解可以参考
一个错误的邮箱匹配正则表达式,回溯测试
有些模式的正则会有严重的性能问题(所有可能的子串去匹配所有可能的子模式), 像不能全都是空格这种限制就不应该用正则.
function isValid(str) {
if (str.trim() === '') {
return false;
}
return /^[\sa-zA-Z0-9]+$/.test(str);
}
导致页面卡死的几种情况:1 无穷解, 感觉不太可能。 2.也有可能是假死,但假死一般就两种情况一种是自身代码书写的问题,还有就是网络的问题按你这个说法估计不可能是网络的问题。 3.从自身找原因吧,我估计是正则有问题,在匹配中有一种可能出现卡死的情况叫做贪婪匹配。具体是什么原因兄弟你结合我的分析下把,
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决