Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.08.2011, 00:00
Профессор
Отправить личное сообщение для (Sandr) Посмотреть профиль Найти все сообщения от (Sandr)
 
Регистрация: 14.10.2010
Сообщений: 376

Функция транслита
Всем доброй ночи!)
Помогите реализовать на js функцию, подобную этой:
<?php
function translite($name){
$tbl= array(
'а'=>'a', 'б'=>'b', 'в'=>'v', 'г'=>'g', 'д'=>'d', 'е'=>'e', 'ж'=>'g', 'з'=>'z',
'и'=>'i', 'й'=>'y', 'к'=>'k', 'л'=>'l', 'м'=>'m', 'н'=>'n', 'о'=>'o', 'п'=>'p',
'р'=>'r', 'с'=>'s', 'т'=>'t', 'у'=>'u', 'ф'=>'f', 'ы'=>'i', 'э'=>'e', 'А'=>'A',
'Б'=>'B', 'В'=>'V', 'Г'=>'G', 'Д'=>'D', 'Е'=>'E', 'Ж'=>'G', 'З'=>'Z', 'И'=>'I',
'Й'=>'Y', 'К'=>'K', 'Л'=>'L', 'М'=>'M', 'Н'=>'N', 'О'=>'O', 'П'=>'P', 'Р'=>'R',
'С'=>'S', 'Т'=>'T', 'У'=>'U', 'Ф'=>'F', 'Ы'=>'I', 'Э'=>'E', 'ё'=>'yo', 'х'=>'h',
'ц'=>'ts', 'ч'=>'ch', 'ш'=>'sh', 'щ'=>'shch', 'ъ'=>'', 'ь'=>'', 'ю'=>'yu', 'я'=>'ya',
'Ё'=>'YO', 'Х'=>'H', 'Ц'=>'TS', 'Ч'=>'CH', 'Ш'=>'SH', 'Щ'=>'SHCH', 'Ъ'=>'', 'Ь'=>'',
'Ю'=>'YU', 'Я'=>'YA'
);
return strtr($name, $tbl);
}
$name='алексашка';
$namefr=translite($name);
echo $namefr;
?>

Вот я начал делать, да чёт не делается..
<script>
function str_replace(subject) {
	var search = ['b','sh'];
	var replace = ['б','ш'];
    document.getElementById('content') = subject.split(search).join(replace);
}
</script>
<textarea id="txt" onKeyUp="str_replace(document.getElementById('txt'))"></textarea>
<div id="content"></div>
Ответить с цитированием
  #2 (permalink)  
Старый 08.08.2011, 00:31
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

function strtr(str, repl) {
    for (var i = 0; i < str.length; i++) {
        var f = str.charAt(i),
            r = repl[f];
        if (r) {
            str = str.replace(new RegExp(f, 'g'), r);
        }
    }
    return str;
}

var trans = {'П': 'P', 'р': 'r', 'и': 'i', 'в': 'v', 'е': 'e', 'т': 't', 'ч': 'ch', 'у': 'u', 'a': 'а', 'к': 'k'};
var str = strtr('Привет, чувак', trans);
alert(str);
Ответить с цитированием
  #3 (permalink)  
Старый 08.08.2011, 00:32
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

(Sandr), вы написали бред, хоть чуток изучите язык если хотите его юзать. JS - это вам не похапэ.

Если же вопрос единичен то дарю:
function translite(str){
var arr={'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ж':'g', 'з':'z', 'и':'i', 'й':'y', 'к':'k', 'л':'l', 'м':'m', 'н':'n', 'о':'o', 'п':'p', 'р':'r', 'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'ы':'i', 'э':'e', 'А':'A', 'Б':'B', 'В':'V', 'Г':'G', 'Д':'D', 'Е':'E', 'Ж':'G', 'З':'Z', 'И':'I', 'Й':'Y', 'К':'K', 'Л':'L', 'М':'M', 'Н':'N', 'О':'O', 'П':'P', 'Р':'R', 'С':'S', 'Т':'T', 'У':'U', 'Ф':'F', 'Ы':'I', 'Э':'E', 'ё':'yo', 'х':'h', 'ц':'ts', 'ч':'ch', 'ш':'sh', 'щ':'shch', 'ъ':'', 'ь':'', 'ю':'yu', 'я':'ya', 'Ё':'YO', 'Х':'H', 'Ц':'TS', 'Ч':'CH', 'Ш':'SH', 'Щ':'SHCH', 'Ъ':'', 'Ь':'',
'Ю':'YU', 'Я':'YA'};
var replacer=function(a){return arr[a]||a};
return str.replace(/[А-яёЁ]/g,replacer)
}
alert(translite('алексашка'))

...
ваый, о_0 что-то мне кажется ваш велосипед должен работать сильно медленней чем классическое решение.)
__________________
29375, 35

Последний раз редактировалось Aetae, 08.08.2011 в 00:35.
Ответить с цитированием
  #4 (permalink)  
Старый 08.08.2011, 00:36
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Сообщение от Aetae
ваый, о_0 что-то мне кажется оно должно работать медленней чем классическое решение.
О, блин, что-то я ступил. Конечно. Пора спать!
Ответить с цитированием
  #5 (permalink)  
Старый 08.08.2011, 00:39
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от (Sandr)
Вот я начал делать, да чёт не делается..
Берем справочник и смотрим сначала split. Оказывается, первым параметром передается регулярное выражение или строка. Вопрос: есть ли смысл передавать массив и удивлять, что не работает, или лучше посмотреть в справочник??? Интересно, что если значение не регулярка, то оно будет преведено к строке:
alert( "a1,2b".split( [ 1, 2 ] ) );
alert( "c[object Object]d".split( {} ) );
А транслит на js делается очень легко, если есть голова:
function translite(string){
  var dictionary = { "б": "b", "г": "g" };
  return string.replace(/[\s\S]/g, function(x){
    if( dictionary.hasOwnProperty( x ) )
      return dictionary[ x ];
    return x;
  });
};

alert( translite( "абвг" ) );
Ответить с цитированием
  #6 (permalink)  
Старый 08.08.2011, 00:43
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Sweet, хы-хы, параноидальный вариант... для крупных проектов.))
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 08.08.2011, 00:57
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от Aetae
параноидальный вариант... для крупных проектов.))
Не обламываюсь писать x.hasOwnProperty( y ) вместо x[ y ] (там где это уместно, конечно) - вошло в привычку
Ответить с цитированием
  #8 (permalink)  
Старый 08.08.2011, 01:00
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Сообщение от Aetae
что-то мне кажется ваш велосипед должен работать сильно медленней чем классическое решение
Проверил на большом тексте.

Производилось 20 запусков. Среднее:
мое решение: 22.7 ms.
"классическое": 17.9 ms.
Ответить с цитированием
  #9 (permalink)  
Старый 08.08.2011, 01:09
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

http://jspeed.yanzigitov.ru/
Дало разницу в 3 раза.)
__________________
29375, 35
Ответить с цитированием
  #10 (permalink)  
Старый 08.08.2011, 18:47
Профессор
Отправить личное сообщение для (Sandr) Посмотреть профиль Найти все сообщения от (Sandr)
 
Регистрация: 14.10.2010
Сообщений: 376

ваый,
спасибо, часто помогаешь))

Aetae, Спасибо)
"вы написали бред", я этот код нашёл в сети, думал, что он правельный..

Sweet,
спасибо)

Последний раз редактировалось (Sandr), 11.08.2011 в 16:23.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция сохранения документа LRCenter Общие вопросы Javascript 11 27.04.2011 23:03
Где вызывается функция? cradis Общие вопросы Javascript 5 23.04.2011 13:47
Mootools функция periodical не работает по id Jumong Общие вопросы Javascript 2 11.09.2010 16:42
Функция которая работает на OnLoad не хочет работать на OnClick libinstyle Элементы интерфейса 6 23.03.2010 01:42
Функция меняющая значение input type text. Value не подходит( Sundog Общие вопросы Javascript 1 25.09.2009 15:06