suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Sonderzeichen verursachen Probleme bei der Joi-Validierung

<p>Ich möchte den Inhalt des Textfelds auf 250 Wörter beschränken. Um dies zu erreichen, verwende ich die Joi-Validierung. Es sollte alle Zeichen (einschließlich Sonderzeichen) zählen und nur 250 Wörter zulassen. Aber ich bin auf das folgende Problem gestoßen. </p> <ol> <li><p>Sobald das erste Sonderzeichen erscheint, erhalte ich auch nach 3 Wörtern eine Joi-Validierungsfehlermeldung mit der Meldung „Dieser Abschnitt darf 250 Zeichen nicht überschreiten.“ </p> </li> <li><p>Wenn ich Inhalte aus einer PDF-Datei kopiere und einfüge, friert mein Bildschirm ein. Ich glaube also, dass mit meinem Joi-Schema etwas nicht stimmt. </p> </li> </ol> <pre class="brush:php;toolbar:false;">description1: Joi.string().regex(/^(([ws,."'()-]+)b[s,.] *){0,250}$/).options({ language: { string: { regex: { base: 'Dieser Teil darf 250 Zeichen nicht überschreiten' } } } }).label("Dieser Teil"),< /pre> ; <p>Kann mir jemand helfen? </p>
P粉267791326P粉267791326497 Tage vor594

Antworte allen(1)Ich werde antworten

  • 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崩溃。

    Antwort
    0
  • StornierenAntwort