特殊字元導致Joi驗證出現問題
P粉267791326
P粉267791326 2023-08-31 09:52:18
0
1
570
<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>
P粉267791326
P粉267791326

全部回覆(1)
P粉916760429

這可能有效:

/^\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崩潰。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板