async-validator icon indicating copy to clipboard operation
async-validator copied to clipboard

错误 Url 的正则校验次数指数级增加

Open iceprosurface opened this issue 4 years ago • 2 comments

/^(?!mailto:)(?:(?:http|https|ftp):\/\/|\/\/)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(\/|\\?|#)[^\\s]*)?$/

这个正则的校验是指数级的,例如校验

http://jhhhhhhhhhhh

每增加一位正则查询次数 *2 约等于 2^(str.length)

image

image

按照 js 的运算性能大约从 37 位起,每增加一位耗时相当于 2^n 秒,大约 44 位就可以耗尽全部 js 计算资源卡死chrome 了

iceprosurface avatar Feb 25 '21 09:02 iceprosurface

type为url时,我也遇到了卡死chrome的问题

JabinHu avatar Mar 22 '21 08:03 JabinHu

我也遇到了,type=url完全没法用,稍微长点直接导致浏览器卡死

lvyangxu avatar Jul 20 '21 03:07 lvyangxu