Регулярное выражение: обеспечить минимальное количество разрывов строк в текстовой области ввода - PullRequest
1 голос
/ 06 января 2012

В настоящее время у меня есть текстовая область в качестве поля ввода, и я хочу убедиться, что она содержит более 3 отдельных строк.

Поскольку я использую инфраструктуру Yii, я использую метод validate () для проверки помодель.

Поскольку проверка выполнялась Yii, я намеревался использовать функцию сопоставления для проверки с помощью регулярных выражений правильности введенных данных.

В настоящее время у меня есть:

    array('ingredients', 'match', 'pattern'=> '/(\n|\r\n|\r){3,}/'),

Что не работает, однако, если я изменяю 3 на 1, оно работает правильно.

Как я могу убедиться, что с помощью регулярных выражений есть хотя бы 3 строки?

Ответы [ 3 ]

1 голос
/ 06 января 2012

Ваше регулярное выражение

/(\n|\r\n|\r){3,}/

будет означать, что есть три последовательных перевода строки. Разрешить некоторые другие символы между, например

/((\n|\r\n|\r).*){3,}/
1 голос
/ 06 января 2012

Три строки - это два перерыва, а не три.Итак, число, которое вы ищете, равно 2.

Тогда регулярные выражения соответствуют первому первому.Таким образом, вы должны использовать \r\n в качестве первого подшаблона, чтобы предотвратить перехват \n\r как последовательность двух разрывов строки.

Затем вы будете искать повторяющиеся разрывы строки.Но вы хотите разрешить больше, чем просто пустые строки.

Возможно, этот шаблон будет соответствовать вашим потребностям:

/^(?:.*(?:\r\n|\n|\r)){2,}/

Это позволит три или более (пустых и непустых) строк.

0 голосов
/ 06 января 2012

Вам также необходимо сопоставить содержимое этих строк:

array('ingredients', 'match', 'pattern'=> '/(.*(\n|\r\n|\r)){3,}/'),
...