Функция транслита
Всем доброй ночи!)
Помогите реализовать на 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> |
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); |
(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 что-то мне кажется ваш велосипед должен работать сильно медленней чем классическое решение.) |
Цитата:
|
Цитата:
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( "абвг" ) ); |
Sweet, хы-хы, параноидальный вариант... для крупных проектов.))
|
Цитата:
|
Цитата:
Производилось 20 запусков. Среднее: мое решение: 22.7 ms. "классическое": 17.9 ms. |
http://jspeed.yanzigitov.ru/
Дало разницу в 3 раза.) |
ваый,
спасибо, часто помогаешь)) Aetae, Спасибо) "вы написали бред", я этот код нашёл в сети, думал, что он правельный.. Sweet, спасибо) |
Часовой пояс GMT +3, время: 00:21. |