Javascript Regex для ограничения количества символов в строке

Aug 26 2020

Я пытаюсь создать регулярное выражение JS, чтобы ограничить количество символов в строке в текстовой области html. В идеале я бы предпочел иметь его как Javascript Regex, так как его проще использовать для нашего механизма проверки формы.

Я хотел бы создать регулярное выражение, которое проверяет, что строка имеет 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} - от нуля до десяти символов, кроме символов разрыва строки
  • (?:\r?\n.{0,10}){0,2} - ноль, одно или два появления
    • \r?\n - Окончание строки CRLF или LF
    • .{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>