Encoderast
@Encoderast
frontend пытается что-то делать в backend

Как реализовать: textarea — обработка — максимум 1 пробел и 2 тега br?

1 часть:

Есть обычный textarea <textarea name="description"></textarea>, вставляя в который текст без обработки все будет в одну строчку

Нашел на пространстве гугла скрипт:
(нажать на меня)

function replace() {
    var form = document.getElementById('form-textarea');
    var form_text = form.value;
    var pattern = /\r\n|\r|\n/g;
    var new_pattern = form_text.replace(pattern,"<br>");
    alert(new_pattern);


Но он делает ровным счетом то, что ему написали, неограниченное число пробелов и < br >

Как будет выглядеть скрипт, который имеет следующие функции:
- текст оборачиваем в <p> </p>
- максимум 1 пробел
- максимум 2 <br>
- если указано 2 <br> - закрывается </p> и открывается новый <p>
Тут пример отображения уже после вывода из БД (нажать на меня)
<p>Тут пишем текст, 
      <br>
      который можно перенести тегом br</p>
<br>
<br>
<p>а если мы указываем 2 тега br, то тег p закрывается и <br>
      открывается новый </p>
<br>
<br>
<p>и так<br>
      неограниченное<br>
      число<br>
      раз
</p>

____________________
2 часть:

вывод текстовой информации из БД в виде текста

другими словами если я сейчас добавлю на сайт в textarea -> БД -> отображение на странице, то, например, добавленыый title page отобразится как заголовок 1-го уровня, а не как текст

_______________

Прошу помочь, если уже где то лежит репозиторий, то прошу скинуть, ибо 2 для поиска привели к нулевому результату, за исключением редакторов WYSIWYG, где самый минимальный функционал позволяет вытворять в него что угодно, от картинок, до php, js, html вставок
  • Вопрос задан
  • 724 просмотра
Решения вопроса 1
Stalker_RED
@Stalker_RED
Если я правильно понял что вы хотите, то как-то так:
function convert() {
  to.innerHTML = from.value
    .replace(/\ {2,}/g, ' ') // максимум 1 пробел
    .replace(/(\r\n|\r|\n){2,}/g, "<br><br>") // максимум 2 <br>
    .replace(/(\r\n|\r|\n)/g, "<br>") // одиночные \n в <br>
    .split('<br><br>').map(s=>`<p>${s}</p>`).join("\n\n") // возможно join стоит заменить на join(""), чтоб не добавлять лишние переводы строк.
}
https://jsfiddle.net/vdth6Lj5/2/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы