Задать вопрос
@adun3

Поправьте пожалуйста скрипт?

Здравствуйте!
Нашел скрипт транслитерации на js.
function rus_to_latin ( str ) {
    
    var ru = {
        'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 
        'е': 'e', 'ё': 'e', 'ж': 'j', 'з': 'z', 'и': 'i', 
        'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o', 
        'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 
        'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 
        'щ': 'shch', 'ы': 'y', 'э': 'e', 'ю': 'u', 'я': 'ya',
		'ъ': 'ie', 'ь': '', 'й': 'i'
    }, n_str = [];
        
    for ( var i = 0; i < str.length; ++i ) {
       n_str.push(
              ru[ str[i] ]
           || ru[ str[i].toLowerCase() ] == undefined && str[i]
           || ru[ str[i].toLowerCase() ].replace(/^(.)/, function ( match ) { return match.toUpperCase() })
       );
    }
    
    return n_str.join('');
}
console.log(rus_to_latin( 'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ' ));

Проблема в том, что он те вещи, которые из нескольких символов, большим ставит только первый(Щ, Ъ, Я, Ш, Ч).
Как сделать так, чтобы он все символы в верхнем регистре писал? Сам в JS мало что пока понимаю.
  • Вопрос задан
  • 257 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
hzzzzl
@hzzzzl
function rus_to_latin (s) {
  return s.split('')
    .map(l => ru[l] || ru[l.toLowerCase()] && ru[l.toLowerCase()].toUpperCase() || l)
    .join('')
}
Ответ написан
TTATPuOT
@TTATPuOT
https://code.patriotovsky.ru/
const rusToLat = function(str) {
  let ru = {
    'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 
    'е': 'e', 'ё': 'e', 'ж': 'j', 'з': 'z', 'и': 'i', 
    'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o', 
    'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 
    'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 
    'щ': 'shch', 'ы': 'y', 'э': 'e', 'ю': 'u', 'я': 'ya',
    'ъ': 'ie', 'ь': '', 'й': 'i'
  };
  let newString = [];
  
  return [...str].map(l => {
    let latL = ru[l.toLocaleLowerCase()];
    
    if (l !== l.toLocaleLowerCase()) {
      latL = latL.charAt(0).toLocaleUpperCase() + latL.slice(1);
    } else if (latL === undefined) {
      latL = l;
    }
    
    return latL;
  }).join('');
}

Я Тестовая СТРОКА... И во мне есть все, ну или почти, элементы знаков припинания!
=>
Ya Testovaya STROKA... I vo mne est vse, nu ili pochti, elementy znakov pripinaniya!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 14:53
30000 руб./за проект
18 дек. 2024, в 14:45
25000 руб./за проект
18 дек. 2024, в 14:43
25000 руб./за проект