1行あたりの文字数を制限するJavascript正規表現

Aug 26 2020

JS正規表現を作成して、HTMLテキスト領域の1行あたりの文字数を制限しようとしています。理想的には、フォーム検証エンジンで使用する方が簡単なので、Javascript正規表現として使用することをお勧めします。

文字列が1行あたり10文字、最大3行であることを検証する正規表現を作成したいと思います。

アイデアは、次のような文字列を検証することです。

01234567890
a
b

ここの最初の行は11文字なので、文字列全体を拒否する必要があります/

a
b
c
d

このテキストは4行あるため、拒否する必要があります。

次の正規表現を試しましたが、期待どおりに機能しません。

^((?:\n)?[^\n]{0,10}){0,3}$

私が間違っていることについての手がかりはありますか?

回答

1 WiktorStribiżew Aug 26 2020 at 19:32

あなたが使用することができます

^.{0,10}(?:\r?\n.{0,10}){0,2}$

正規表現のデモを見る

詳細

  • ^ -文字列の開始
  • .{0,10} -改行文字以外の0から10文字
  • (?:\r?\n.{0,10}){0,2} -ゼロ、1つまたは2つの発生
    • \r?\n -CRLFまたはLF行末
    • .{0,10} -改行文字以外の0から10文字
  • $ -文字列の終わり。

JavaScript:

const valid_rx = /^.{0,10}(?:\r?\n.{0,10}){0,2}$/;
const testFunc = () => {
    if(!valid_rx.test(document.all.mytextarea.value))
    {
        console.log("Please use correct format.");
        return false;
    }
}
<textarea id="mytextarea" cols="50" rows="10">a
b
c
</textarea>
<button onclick="testFunc()">Click Me</button>