Регулярное выражение для проверки длины строки без включения тегов HTML - PullRequest
1 голос
/ 21 сентября 2011

Я использую umbraco, где проверка полей выполняется регулярными выражениями. В одном поле я хочу разрешить пользователям стилизовать свой текст с помощью текстового редактора (tinymce), но я все еще хочу ограничить количество символов, которое они могут ввести.

В настоящее время я использую это регулярное выражение, но оно проверяет общее количество символов, поэтому включает html.

^[\s\S]{0,250}$

Существует ли регулярное выражение, которое не будет считать символы в HTML-тегах.

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Короткий ответ - нет.По крайней мере, не с каким-либо вменяемым регулярным выражением, не без продвинутого движка регулярных выражений, который допускает рекурсию или сбалансированные группы, и, возможно, не совсем.Регулярное выражение, которое может распознавать и игнорировать теги HTML, должно было бы проанализировать HTML, чтобы сделать это, и по этому пути лежит безумие.

Однако, вы могли бы использовать некоторыесвоего рода предварительная обработка, такая как jQuery на стороне клиента или что-то еще на стороне сервера, для анализа HTML и удаления тегов до , к которым вы применяете проверку длины.

Выконечно, ты хочешь сделать это?Если вы храните введенный стиль в базе данных, эти HTML-теги будут учитываться в размере столбца, как и все остальное.Если вы храните их в столбце varchar (250), вам придется либо считать HTML-теги как часть этих 250, либо убрать их и потерять всю информацию о стиле.

0 голосов
/ 21 сентября 2011

Будет трудно (почти невозможно) сделать это за один шаг, поскольку грамматика, которую вы пытаетесь обнаружить, не не зависит от контекста. Два шага было бы легко; просто замените сначала s/<.+?>//, чтобы удалить все теги, а затем посчитайте снова.

В соответствующей заметке ваше регулярное выражение немного глупо. Вы можете использовать символ . для представления любого символа; вам не нужно делать трюк «пробел ИЛИ не пробел», который вы используете.

^.{0,250}$
...