Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.09.2009, 21:06
Аспирант
Отправить личное сообщение для Georgiy Посмотреть профиль Найти все сообщения от Georgiy
 
Регистрация: 19.08.2009
Сообщений: 35

Динамичная транслитерация рус-en
Нашёл хороший скрипт:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Translit</title>
<script type="text/javascript">
/* Javascript functions */
function JSfunc()
{
	/* Making transliteration! */
	this.strTranslit = function(el)
	{
		new_el = document.getElementById('out');
		A = new Array();
		A["Ё"]="YO";A["Й"]="I";A["Ц"]="TS";A["У"]="U";A["К"]="K";A["Е"]="E";A["Н"]="N";A["Г"]="G";A["Ш"]="SH";A["Щ"]="SCH";A["З"]="Z";A["Х"]="H";A["Ъ"]="'";
		A["ё"]="yo";A["й"]="i";A["ц"]="ts";A["у"]="u";A["к"]="k";A["е"]="e";A["н"]="n";A["г"]="g";A["ш"]="sh";A["щ"]="sch";A["з"]="z";A["х"]="h";A["ъ"]="'";
		A["Ф"]="F";A["Ы"]="I";A["В"]="V";A["А"]="A";A["П"]="P";A["Р"]="R";A["О"]="O";A["Л"]="L";A["Д"]="D";A["Ж"]="ZH";A["Э"]="E";
		A["ф"]="f";A["ы"]="i";A["в"]="v";A["а"]="a";A["п"]="p";A["р"]="r";A["о"]="o";A["л"]="l";A["д"]="d";A["ж"]="zh";A["э"]="e";
		A["Я"]="YA";A["Ч"]="CH";A["С"]="S";A["М"]="M";A["И"]="I";A["Т"]="T";A["Ь"]="'";A["Б"]="B";A["Ю"]="YU";
		A["я"]="ya";A["ч"]="ch";A["с"]="s";A["м"]="m";A["и"]="i";A["т"]="t";A["ь"]="'";A["б"]="b";A["ю"]="yu";
		new_el.value = el.value.replace(/([\u0410-\u0451])/g,
			function (str,p1,offset,s) {
				if (A[str] != 'undefined'){return A[str];}
			}
		);
	}
	/* Normalizes a string, eю => eyu */
	this.strNormalize = function(el)
	{
		if (!el) { return; }
		this.strTranslit(el);
	}
}
var oJS = new JSfunc();
</script>
</head>
<body>

<p>введите текст:</p>
<textarea onkeyup="oJS.strNormalize(this)" style="height:10em;width:100%" id="in"></textarea>
<p>результат:</p>
<textarea style="height:10em;width:100%" id="out"></textarea>

</body>
</html>


подскажите как нужно дополнить скрипт, чтобы при вводе пробела, он был заменён на _ (нижнее подчёркивание).

Цель: для ЧПУ
Ответить с цитированием
  #2 (permalink)  
Старый 12.09.2009, 22:56
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Здравствуйте!

Судя по вашему сообщению, вы ну совсем не знаете javascript.

Освойте основы языка и вопрос отпадет сам, полностью или частично.
А с чем не справитесь - поможем.

На сайте javascript можно начать изучать с учебника, раздел Основы javascript.
Возможно, вам также понадобится HTML - учебник есть, например, здесь: http://ru.html.net/tutorials/html/

Задавайте конкретные вопросы по ходу дела.
Ответить с цитированием
  #3 (permalink)  
Старый 13.09.2009, 10:53
Аспирант
Отправить личное сообщение для Georgiy Посмотреть профиль Найти все сообщения от Georgiy
 
Регистрация: 19.08.2009
Сообщений: 35

Сообщение от Gvozd Посмотреть сообщение
Здравствуйте!

Судя по вашему сообщению, вы ну совсем не знаете javascript.

Задавайте конкретные вопросы по ходу дела.
Это точно - не знаю. Очень хочу изучить, но всё как-то пока не получается подойти к этому предмету... только подкрастся и взять какой-нить готовый скрипт - благо их сейчас много, однако в таких ситуациях как эта - нужно уметь исправить, а для этой ситуации - есть этот форум. Помню как-то на этом форуме мне подсказали, и я врубился в ту конкретную тему и теперь то что уже прошёл - знаю в javascript. Может так и научусь половине


Относительно этого скрипта - не понятно зачем Вы мне рекомендуете изучать html. Помоему он здесь в данном случае не нужен вовсе. Если поставить
A["&nbsp;"]="_";
то ничего не выйдет - я это без особых знаний понимаю и даже не пробовал этот вариант. Наивно попробовал
A[" "]="_";
- конечно не сработало. Пробел это же символ и его нужно указать. Потом я обнаружил, что если я перенесу строку, транслитерация также перенесётся синхронно на следующую строчку. Я прикинул что отвечает за это скорее всего строчка
new_el.value = el.value.replace(/([\u0410-\u0451])/g,

- но могу ошибаться..

А так как таких ньюансов я не ведаю, решил опоститься здесь чтобы мне кинули строчку символов обозначающую пробел и замены его на _
видел функцию str.replace(' ','_') но даже пробовать не рискнул - в js не так всё просто...
Ответить с цитированием
  #4 (permalink)  
Старый 13.09.2009, 11:31
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от Georgiy
не понятно зачем Вы мне рекомендуете изучать html
это RTFM.

Сообщение от Georgiy
видел функцию str.replace(' ','_') но даже пробовать не рискнул - в js не так всё просто...
попробуй.
Ответить с цитированием
  #5 (permalink)  
Старый 13.09.2009, 11:47
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Georgiy
и даже не пробовал этот вариант.
Сообщение от Georgiy
даже пробовать не рискнул
что ж вы такой не уверенный-то?)
от того, что вы попробуете пускай даже бредовую идею, ничего страшного тут не случится
Сообщение от Georgiy
видел функцию str.replace(' ','_')
ну, вполне можно было использовать
только в виде:
new_el.value = el.value.replace(/([\u0410-\u0451])/g,
            function (str,p1,offset,s) {
                if (A[str] != 'undefined'){return A[str];}
            }
        ).replace(/ /g,'_');//символ g использован для того чтобы заменять все пробелы, а не только первый

Но это скорее костыль
правильно будет так сделать:
Сообщение от Georgiy
A[" "]="_";
(вы двигались в верном направлении)
и
new_el.value = el.value.replace(/([\u0410-\u0451 ])/g,//обратите внимание на пробел перед закрывающей квадратной скобкой.
                                                                          //благодаря ему и работает
            function (str,p1,offset,s) {
                if (A[str] != 'undefined'){return A[str];}
            }
        );

суть в том, что мы расширили символьный класс [\u0410-\u0451] до [\u0410-\u0451 ], добавив пробел в качестве символа для поиска
для того, чтобы понять как вообще работают регулярные выражения в JS, рекомендую ознакомится со статьями
http://javascript.ru/basic/regular-expression
http://javascript.ru/RegExp
Ответить с цитированием
  #6 (permalink)  
Старый 13.09.2009, 13:42
Аспирант
Отправить личное сообщение для Georgiy Посмотреть профиль Найти все сообщения от Georgiy
 
Регистрация: 19.08.2009
Сообщений: 35

Сообщение от Gvozd Посмотреть сообщение
что ж вы такой не уверенный-то?)
Опыт. Когда cуёшся без консультации в тему которую не понимаешь - потратишь много времени. А я из-за своей упрямости если засяду, то вылезу на второй день, но сделаю. Вот этой глупой потери времени мне не нужно, если есть тематические форумы.


Сообщение от Gvozd Посмотреть сообщение
суть в том, что мы расширили символьный класс [\u0410-\u0451] до [\u0410-\u0451 ], добавив пробел в качестве символа для поиска
для того, чтобы понять как вообще работают регулярные выражения в JS, рекомендую ознакомится со статьями
http://javascript.ru/basic/regular-expression
http://javascript.ru/RegExp
Прекрасно. Поставил пробел и теперь происходит замена на "ничто".
Я считаю что для этой задачи такому специалисту как-то скудненько отсылать на изучение литературы, в которой только 0.0001% материала будет полезно для этого решения.

Не понимаю, сложно что-ли кинуть строку как заменить в готовом скрипте " " на "_"? Я конечно благодарю Вас о такой заботе чтобы я больше знал, но как-то странно для спецов создавать такой ахиренный форум на таком ахиренном домене и постоянно в топиках произносить "RTFM"!
Ответить с цитированием
  #7 (permalink)  
Старый 13.09.2009, 14:20
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

заменить
Сообщение от Georgiy
\u0410-\u0451
на [\u0020\u0410-\u0451]
и добавить
Сообщение от Georgiy
A[" "]="_";
вроде должно заработать.
Ответить с цитированием
  #8 (permalink)  
Старый 13.09.2009, 15:02
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Georgiy,
читайте внимательно для начала сообщения
я написал
Сообщение от Gvozd
правильно будет так сделать:
Сообщение от Georgiy
A[" "]="_";
(вы двигались в верном направлении)
и
new_el.value = el.value.replace(/([\u0410-\u0451 ])/g,//обратите внимание на пробел перед закрывающей квадратной скобкой.
                                                                          //благодаря ему и работает
            function (str,p1,offset,s) {
                if (A[str] != 'undefined'){return A[str];}
            }
        );
частичка и указывает на то, что выполнить надо оба действия

более того, мой первый, "костыльный" вариант также работает, и уж его не суметь вставить у вас не могло получится

PS
Сообщение от Georgiy
как-то странно для спецов создавать такой ахиренный форум на таком ахиренном домене и постоянно в топиках произносить "RTFM"!
http://phpclub.ru/faq/WhyForum
Ответить с цитированием
  #9 (permalink)  
Старый 13.09.2009, 15:29
Аспирант
Отправить личное сообщение для Georgiy Посмотреть профиль Найти все сообщения от Georgiy
 
Регистрация: 19.08.2009
Сообщений: 35

спасибо, работает! ОГРОМНОЕ СПАСИБО!

Сообщение от Gvozd Посмотреть сообщение
http://phpclub.ru/faq/WhyForum
Цитата:
Форум нужен для того, чтобы Вы САМИ нашли ответ на свой вопрос.
Согласен. Поэтому мы пользователи стараемся называть темы топиков как можно детальнее, и раскрывать сущность вопроса сжато и подробно, чтобы другие пользователи могли найти ваш прекрасный форум в поисковиках, тем самым поднимая рейтинг форума и быть жутко благодарными за найденный ответ. Я всегда стараюсь сначала найти по разным ключевикам похожую проблему, а если не нахожу, универсалю тему и тем самым получаю ответ, который послужит другим пользователям. Тем кто задаёт вопросы до поиска вопросы, или просто ленятся, или на сайте какая-нибудь муть с поиском.

Цитата:
Форум нужен для того, чтобы Вы САМИ опубликовали на нем ответ на вопрос, интересный многим.
Согласен. Потому считаю разводить темы типа "смотри документацию" со ссылкой на скачивание целой книги на конкретный вопрос крайне нерационально. Кто не любит свою сферу деятельности - тот всегда молчит. Кто уважает программирование, с радостью погоняет импульсы по нейронам.

Цитата:
Форум НЕ предназначен для того, чтобы КТО-ТО нашёл за Вас ответ на Ваш вопрос или решил за Вас Вашу проблему.
Этот тезис логически противоречит двум вышесказанным. Как-то один знакомый сказал (не в обиду) - "хочешь секса в гамаке стоя на лыжах, напевая песню "Матушка Россия" в обратном порядке, - учавствуй на форуме phpclub.ru"
Ответить с цитированием
  #10 (permalink)  
Старый 13.09.2009, 17:00
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от Georgiy
Этот тезис логически противоречит двум вышесказанным.
Смотря как их понимать, первый можно понимать так: возникает интересный вопрос, спрашиваешь на форуме и !сам! продолжаешь искать, далее отвечаешь на свой же вопрос. Второй тезис можно понимать так же. Теперь ничто ничему не противоречит.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск