特殊字元導致Joi驗證出現問題
P粉267791326
2023-08-31 09:52:18
<p>我想限製文字方塊內的內容為250個字。我正在使用joi驗證來實現。它應該計算所有字元(包括特殊字元)並且只允許250個字。但是我遇到了以下問題。 </p>
<ol>
<li><p>一旦出現第一個特殊字符,即使是在3個字後面,我就會收到joi驗證錯誤,顯示「此部分不能超過250個字」。 </p>
</li>
<li><p>當我從PDF複製貼上內容時,我的螢幕會凍結。所以我認為我的joi模式有問題。 </p>
</li>
</ol>
<pre class="brush:php;toolbar:false;">description1: Joi.string().regex(/^(([\w\s,."'()-] )\b[\ s,.]*){0,250}$/).options({ language: { string: { regex: { base: '此部分不能超過250個字' } } } }).label("此部分" ),</pre>
<p>有人能幫幫我嗎? </p>
這可能有效:
與你原來的正規表示式中僅匹配
[a-zA-Z0-9_]
的\w
不同,特殊符號\S
匹配任何非空格字元。因為字元集\S
和\s
完全不同,所以這應該避免了任何與災難性回溯相關的問題。解釋:
\s*
開頭的0個或多個空格。這些不計入。(\S \s )
一個單詞,由1個或多個非空格字元後面跟著1個或多個空格字元組成。{0,249}
最多重複249次\S*
可選地在結尾添加一個額外的單字,該單字不應以空格結尾。這是第250個單詞,所以上面的行數需要是249而不是250。這只能回溯最後一個單字的長度,所以如果最後一個單字非常長,可能會很慢。然而,成長不能是指數級的,所以它不應該導致Joi崩潰。