@ShadowTrix

В JS проверить наличие символов между определенными тегами?

Пытаюсь средствами JS проверить, что отправляемое текстовое сообщение не пустое.

Так как использую редактор TinyMCE, то нужно проверять именно html, а не просто текст.

Если текст, то все просто:
const text = editor.getContent({format: 'text'}).replace(/\s+/g,' ').trim();

if(text === '' || !text) {
	return false;
}


Но, так как это визуальный редактор, то могут быть такие эбмеды, как <iframe>, <video>, <audio> и т.д. без каких-либо текстовых вставок между тегами.
Соответственно, вышеуказанный код будет возвращать ошибку при таком постинге.

Если разрешить брать контент, как html, то пропускаются двойные пробелы и т.д.

В конфиге используются <div>, как рутовые для текста, то есть всегда в коде сообщения будет изначально
<div> ...message... </div>

Отсюда возникла мысль проверять, что в исходном коде сообщения после первого тега <div> присутствует любой символ, кроме пробелов и табуляции.

Вопрос: как это сделать посредством регулярных выражений в JS?
Может быть у вас есть метод проще и лучше.

Спасибо за любое предложенное решение.
  • Вопрос задан
  • 205 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ShadowTrix Автор вопроса
Пока остановился на таких вариантах.

#1.
Если в конфиге TinyMCE убрать рутовый блок:
forced_root_block: '',

То приведенный в вопросе код срабатывает.
Однако. если в исходный код отправитель поставит любой тег, типа <p>/<p> то сообщениие уйдет, но это решается другими ограничениями для правки текста, например. доступом или удалением плагина/кнопки в тулбаре.

Нашел здесь.

#2.
EnGold в комментарии подсказал использовать innerHTML для сравнения вводимого текста.

Я попробовал что-то типа этого:
const text = editor.getContent().replace(/\s+/g,'  ').trim();
const html = text.innerHTML;
							
if(text === '' || !text || html === '<div></div>') {
	return false;
}


Это работает. но там много нюансов над которыми стоит подумать.
В принципе - рабочий вариант также.

#3.
Тут предлагают паттерн и в комменте его улучшение, который тоже можно попробовать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы