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崩潰。