搜尋

首頁  >  問答  >  主體

特殊字元導致Joi驗證出現問題

<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粉267791326P粉267791326459 天前559

全部回覆(1)我來回復

  • P粉916760429

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

    回覆
    0
  • 取消回覆