P粉9167604292023-09-01 00:35:05
这可能有效:
/^\s*(?:\S+\s+){0,249}\S*\s*$/
与你原来的正则表达式中仅匹配[a-zA-Z0-9_]
的\w
不同,特殊符号\S
匹配任何非空格字符。因为字符集\S
和\s
完全不同,所以这应该避免了任何与灾难性回溯相关的问题。
\s*
开头的0个或多个空格。这些不计入。(\S+\s+)
一个单词,由1个或多个非空格字符后跟1个或多个空格字符组成。{0,249}
最多重复249次\S*
可选地在结尾添加一个额外的单词,该单词不应以空格结尾。这是第250个单词,所以上面的行数需要是249而不是250。这只能回溯最后一个单词的长度,所以如果最后一个单词非常长,可能会很慢。然而,增长不能是指数级的,所以它不应该导致Joi崩溃。