Регулярное выражение Javascript для ограничения количества символов в строке

#javascript #regex #character #line #limit

#javascript #регулярное выражение #символ #строка #ограничение

Вопрос:

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

Я хотел бы создать регулярное выражение, которое подтверждает, что строка содержит 10 символов в строке и максимум 3 строки

Идея заключалась бы в проверке строк, подобных следующим:

 01234567890
a
b
  

Первая строка здесь содержит 11 символов, поэтому вся строка должна быть отклонена/

 a
b
c
d
  

Этот текст состоит из 4 строк, поэтому его также следует отклонить.

Я пробовал использовать следующее регулярное выражение, но работает не так, как ожидалось:

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

есть какие-либо подсказки о том, что я делаю неправильно?

Ответ №1:

Вы можете использовать

 ^.{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>  

Комментарии:

1. Очередь редактирования заполнена, поэтому в данный момент не может этого сделать, но, пожалуйста, обратите внимание, что ^^ и $ — это не начало / конец строки, а скорее начало / конец строки. Важное отличие для проверки пользовательского ввода. A и z — это начало / конец строки.

2. @MahNas92 Вы ошибаетесь. Это поток JavaScript. Обратите внимание на вкус ECMAScript.

3. Ах, полностью пропустил это, пришел сюда из поисковой системы и был полностью сосредоточен на самом регулярном выражении. Мой плохой, спасибо, что указали на это!

4. @MahNas92 То, что вы сказали, связано с использованием регулярных выражений Ruby (Onigmo / Oniguruma), где ^ и $ совпадают с началом / концом строки и A / z совпадают с началом / концом строки.

5. это также верно для Java regex flavor и для Kotlin (который, я думаю, тоже использует Java). Но, похоже, оно также является стандартным (или, по крайней мере, основным потоком). Я не могу найти ни одной ссылки, привязывающей его к определенному виду. Может быть, вы можете помочь мне с таким источником / ссылкой?