@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 мало что пока понимаю.
  • Вопрос задан
  • 255 просмотров
Решения вопроса 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!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы