08.08.2011, 00:00
|
Профессор
|
|
Регистрация: 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>
|
|
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);
|
|
08.08.2011, 00:32
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
(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.
|
|
08.08.2011, 00:36
|
Профессор
|
|
Регистрация: 29.06.2011
Сообщений: 445
|
|
Сообщение от Aetae
|
ваый, о_0 что-то мне кажется оно должно работать медленней чем классическое решение.
|
О, блин, что-то я ступил. Конечно. Пора спать!
|
|
08.08.2011, 00:39
|
Профессор
|
|
Регистрация: 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( "абвг" ) );
|
|
08.08.2011, 00:43
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Sweet, хы-хы, параноидальный вариант... для крупных проектов.))
__________________
29375, 35
|
|
08.08.2011, 00:57
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
Сообщение от Aetae
|
параноидальный вариант... для крупных проектов.))
|
Не обламываюсь писать x.hasOwnProperty( y ) вместо x[ y ] (там где это уместно, конечно) - вошло в привычку
|
|
08.08.2011, 01:00
|
Профессор
|
|
Регистрация: 29.06.2011
Сообщений: 445
|
|
Сообщение от Aetae
|
что-то мне кажется ваш велосипед должен работать сильно медленней чем классическое решение
|
Проверил на большом тексте.
Производилось 20 запусков. Среднее:
мое решение: 22.7 ms.
"классическое": 17.9 ms.
|
|
08.08.2011, 01:09
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
__________________
29375, 35
|
|
08.08.2011, 18:47
|
Профессор
|
|
Регистрация: 14.10.2010
Сообщений: 376
|
|
ваый,
спасибо, часто помогаешь))
Aetae, Спасибо)
"вы написали бред", я этот код нашёл в сети, думал, что он правельный..
Sweet,
спасибо)
Последний раз редактировалось (Sandr), 11.08.2011 в 16:23.
|
|
|
|