Joi 検証で問題を引き起こす特殊文字
P粉267791326
2023-08-31 09:52:18
<p>テキスト ボックスの内容を 250 ワードに制限したいと考えています。これを達成するために joi 検証を使用しています。すべての文字 (特殊文字を含む) をカウントし、250 単語のみを許可する必要があります。しかし、次の問題に遭遇しました。 </p>
<ol>
<li><p>最初の特殊文字が出現するとすぐに、たとえ 3 単語後であっても、「このセクションは 250 文字を超えることはできません」という joi 検証エラーが表示されます。 </p>
</li>
<li><p>PDF からコンテンツをコピーして貼り付けると、画面がフリーズします。したがって、私の攘夷図式には何か問題があると思います。 </p>
</li>
</ol>
<pre class="brush:php;toolbar:false;">説明 1: Joi.string().regex(/^(([\w\s,."'()-] )\b[\ s,.]*){0,250}$/).options({ language: { string: { regex: {base: 'この部分は 250 文字を超えることはできません' } } }).label("この部分" ),< ;/前>
<p>誰か助けてくれませんか? </p>
これはうまくいくかもしれません:
リーリーは、
###説明する:###[a-zA-Z0-9_]
のみに一致する元の正規表現の\w
とは異なり、特殊記号\S
は一致します。スペース以外の任意の文字。文字セット\S
と\s
は完全に異なるため、これにより、致命的なバックトラッキングに関連する問題が回避されます。\s*- の先頭には 0 個以上のスペースがあります。これらはカウントされません。
(\S \s )- 1 つ以上の非スペース文字とそれに続く 1 つ以上のスペース文字で構成される単語。
{0,249}- 最大 249 回繰り返します
\S*- 必要に応じて、末尾に余分な単語を追加します。スペースで終わることはできません。これは 250 番目のワードなので、上記の行数は 250 ではなく 249 である必要があります。
これは最後の単語の長さだけを遡るため、最後の単語が非常に長い場合は遅くなる可能性があります。ただし、指数関数的に成長することはできないため、攘夷が崩壊することはありません。