Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Как конвертнуть n символы в 'n' текст


Автор: Innuendo 16.8.2006, 00:25
У меня вот такая проблема.
Мне нужно сохранить введеный в текстареу текст в переменную стринговую.
Но так сохранить, чтоб потом при выводе знаки перехода сохранялись. Как в текстареии убрать все переходы строки и вместо них поставить \n - ну чтоб это было стринг в 1 строку, с вот такими переходами строк.

И так же нужно будет сделать обратную функцию. т.е. из переменной текст переходит в текстареу и все ентеры (в виде символов \n или ещё как-то) превратятся в настроящие ентеры =)

Автор: 12345c 16.8.2006, 00:37
В строке без проблем сохраняются переводы строк. Это нужно только при генерации строки в HTML-коде.

s.replace(/\r?\n/g,"\\n")
Обратно -
s.replace(/\\n\g,"\n")

Автор: Innuendo 16.8.2006, 12:08
спасибо конечно, но, честно не совсем понял как расшиврофать этот reg exp... А хотелось бы, не люблю тупо копировать что-то...
и во-втором реге, разве перед g должен быть не в другую сторону слэш?

Автор: Sardar 16.8.2006, 12:17
\r?\n - не обязательный \r и затем \n, под *nix и win, но не под старый мак, там только \r
g - модификатор глобального рега, не остановиться найдя первое совпадение

В "Обратно" ошибка, \g заменяем на /g.

Автор: Innuendo 16.8.2006, 12:27
Цитата(Sardar @  16.8.2006,  12:17 Найти цитируемый пост)
В "Обратно" ошибка, \g заменяем на /g. 

значит я прально заметил =)

Цитата(Sardar @  16.8.2006,  12:17 Найти цитируемый пост)
g - модификатор глобального рега, не остановиться найдя первое совпадение

спасибо, а то не понимал что такое глобальный рег =)

спасибо, вроде понял.

Автор: Innuendo 16.8.2006, 12:43
а вот такая проблема:
для теста сделал 1 текстареа и 1 див. Надо чтоб при клике на текстарею её содержимое перешло в див. Чтоб переходы сохранились:
Код

<textarea id="input" onclick="mytest()" /></textarea>
<div id="output"> </div>
<script>
function mytest(){
var output1 ="";
var input1  = "";
input1 = document.getElementById("input").value;
output1 = input1.replace(/\r?\n/g,"\\n");
document.getElementById("output").innerHTML = output1;
}
</script>


завожу пару строк в текстарею, кликаю по ней, и в диве отображаются вместо ентеров просто /n... почему не конвертируется?

Добавлено @ 12:46 
вообще-то.. мне вот что надо сделать:
Пользователь вводит текст в текстарею.
Скрипт переводит строку в уникод, и конвертируют переходы (чтоб они сохранились). Хранит эту строку в переменной.
Потом при вызове её он просто получает в другой текстареи то что он ввёл но уже переведенное обратно на русский, и с переходами.
Сейчас пока-что у меня все мои строки хранятся в массиве, и они там уже так и хранятся в уникоде, и с \n вместо ентеров. Но во-первых это придаёт громоздкость файлу, а во-вторых то, что я делаю как раз и надо чтоб пользователь мог сам заносить новые строки.

Автор: Sardar 16.8.2006, 15:03
Цитата(Innuendo @  16.8.2006,  11:43 Найти цитируемый пост)
и в диве отображаются вместо ентеров просто /n

Не /n, a \n. Ты этого и хотел, заменить все вхождения символов \n на строки "\n", т.е. получаеться одна большая строка. Её ты вставляешь в div, в чём проблема? Если хочешь что бы и в диве переводы строк отображались "правильно", то заменяй на "<br />\n".

Цитата(Innuendo @  16.8.2006,  11:43 Найти цитируемый пост)
Скрипт переводит строку в уникод, и конвертируют переходы (чтоб они сохранились)

Как понять сохранились? Кто/что убивает символы перевода строки?

Что пишем, не интерактивный транслит? smile

Автор: Innuendo 16.8.2006, 16:00
Цитата(Sardar @  16.8.2006,  15:03 Найти цитируемый пост)
Что пишем, не интерактивный транслит? smile 

неа =) Пишем быстрые ответы на письма. Т.е. ответы по шаблонам. Есть выпадающий список, там название шаблонов, я выбираю один и ответ вставляются в текстарею.
Но мне часто надо редактировать шаблоны, поэтому надо всё время редактировать сам .js файл и в нём масссив, а потом и выпадающий список редактировать, и так как у меня это xul приложение, то надо заново паковать, и инсталлировать.
Поэтому решил вот написать редактор шаблонов:
Текстареа, панель кнопкочек. Пользователь вводит в текстарею сообщение, оно перводится в уникод, сохраняются пеерходы строг и загоняется в стринг. Стринг загоняется в xml-структуру, которая сохраняется в префах, и из неё можно загружать шаблоны.


Цитата(Sardar @  16.8.2006,  15:03 Найти цитируемый пост)
Не /n, a \n.

да, сорри, опечатался.
Цитата

Ты этого и хотел, заменить все вхождения символов \n на строки "\n", т.е. получаеться одна большая строка. Её ты вставляешь в div, в чём проблема? Если хочешь что бы и в диве переводы строк отображались "правильно", то заменяй на "<br />\n".

А... с дивом понятно. но мне вообще-то надо чтоб он вставлял потом в текстарею...
Я щас подредактировал скрипт... Если я вставляю в текстару просто скопированный текст, то он вставляется с переходами как следует, а еслия  преобрузую через replace, то выводится в одну строку с /n
Странно, тогда получается мне вообще не надо ничего преобразовать с этими переходами?

Чё-то я запутался...
Вот посмотрите тестовый пример:
Код

<html>
<head>
<script>
<!--
function mytest(){
var s1 = s2 = "";
s1 = document.getElementById("t").value;
s2 = s1.replace(/\r?\n/g,"\\n");
var s3 = "Line1\nLine2"
document.getElementById("t1").value = s1;
document.getElementById("t2").value = s2;
document.getElementById("t3").value = s3;
//->
}
</script>
</head>
<body>
Введите пару строк текста и нажмите на кнопку "Пуск"
<textarea id="t" > </textarea><br />
<input onclick="mytest()" type="button" value="Пуск" />
<hr />
1)Копируем содержимое первой текстареи и вставляем сюда:<br />
<textarea id="t1"> </textarea><br />
2)Преобразовываем содержимое первой текстареии через <strong>replace(/\r?\n/g,"\\n")</strong> и вставляем:<br />
<textarea id="t2"> </textarea><br />
3)Вставляем готовую переменную <strong>Line1\nLine2</strong> в текстарею:<br />
<textarea id="t3"> </textarea>
</body>
</html>



Добавлено @ 16:08 
В этом примере. Ввожу в текстарею 2 строки: Test1 и Test2 (через Ентер)
В ответах получаю:
Цитата

1) 
Test1
Test2
2)
Test1\nTest2
3)
Line1
Line2

Я вот что не пойму, если он во-втором случае преобразовал строку и строка была "Test1\nTest2", то почемув строке "Line1\nLine2", которую я сам создал он поставил ентер?

Автор: Sardar 16.8.2006, 17:19
Цитата(Innuendo @  16.8.2006,  15:00 Найти цитируемый пост)
которую я сам создал он поставил ентер? 

Потому что \n в строке заменяеться на символ перевода строки, как в C, Java, C# и т.д.  В исходниках имею в виду, это выполняеться парсером. \n в коде (обязан записать как "\\n", т.е. экранируем \ символ) принимаеться как текст, в JS строки вообще не имеют скрытых фильтров.

Innuendo, я всё понял, решение: ничего не делай  smile   В прямом смысле не каверкай строки, символы перевода строки убиваться при копировании с textarea в textarea (и любой другой компонент не убиающий пробельные символы, например pre) не будут. И с чего ты решил что переменная в JS не может держать текст из многих строк...?

Автор: Innuendo 16.8.2006, 20:19
Цитата(Sardar @  16.8.2006,  17:19 Найти цитируемый пост)
Потому что \n в строке заменяеться на символ перевода строки, как в C, Java, C# и т.д.  В исходниках имею в виду, это выполняеться парсером. \n в коде (обязан записать как "\\n", т.е. экранируем \ символ) принимаеться как текст, в JS строки вообще не имеют скрытых фильтров.

ааа, блин
у нас же :
s1.replace(/\r?\n/g,"\\n");
там 2 слэша, первый означает что воспринимать литерально... Точно, вот что значит плохо знать reg Exp =(


Цитата(Sardar @  16.8.2006,  17:19 Найти цитируемый пост)
Innuendo, я всё понял, решение: ничего не делай  smile 

ок =)

Цитата(Sardar @  16.8.2006,  17:19 Найти цитируемый пост)
И с чего ты решил что переменная в JS не может держать текст из многих строк...? 

да я так решил потому что я же сначала шаблоны забивал в строки сам. Они у меня вообще когда не было программы и отвечал на письма вручную, были просто в блокнотике. Когда решил сделать "отвечалку", стал заносить их в массив, и там строка обрывалась на ентере, и я все ентеры поменял на \n =)

Ладно, ок.. думаю если я ничего не буду делать с этими переходами, то всё будет ОК =)

Автор: 12345c 16.8.2006, 22:11
Цитата(12345c @  16.8.2006,  00:37 Найти цитируемый пост)
В строке без проблем сохраняются переводы строк. Это нужно только при генерации строки в HTML-коде.
А это я для кого говорил ? ;)

Автор: Innuendo 16.8.2006, 22:35
да, не заметил =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)