Транслитерация в input поле

167
09 июня 2018, 00:40

Как сделать, чтоб при вводе в это поле русских символов проходила транслитерация, и пробелы менялись символом "-"?

<input type="text" class="form-control width-500" name="xfield[artist]" id="xf_artist" value="Қайрат Нұртас &amp; Заңғар Нұртас">
Answer 1

var input = document.getElementById('input'); 
 
input.addEventListener('input', function() { 
  this.value = textTransform(this.value); 
}); 
 
function textTransform(text){ 
  var arrru = [ 'Я','я','Ю','ю','Ч','ч','Ш','ш','Щ','щ','Ж','ж','А','а','Б','б','В','в','Г','г','Д','д','Е','е','Ё','ё','З','з','И','и','Й','й','К','к','Л','л','М','м','Н','н', 'О','о','П','п','Р','р','С','с','Т','т','У','у','Ф','ф','Х','х','Ц','ц','Ы','ы','Ь','ь','Ъ','ъ','Э','э', ' ' ]; 
  var arren = [ 'Ya','ya','Yu','yu','Ch','ch','Sh','sh','Sh','sh','Zh','zh','A','a','B','b','V','v','G','g','D','d','E','e','E','e','Z','z','I','i','J','j','K','k','L','l','M','m','N','n', 'O','o','P','p','R','r','S','s','T','t','U','u','F','f','H','h','C','c','Y','y','`','`','\'','\'','E', 'e', '-' ]; 
 
  for(var i=0; i<arrru.length; i++){ 
    var reg = new RegExp(arrru[i], "g"); 
    text = text.replace(reg, arren[i]); 
  } 
   
  return text; 
}
<input type="text" id="input">

Answer 2

У меня вот такой код валялся:

    var input = document.getElementById('input'); 
 
    input.addEventListener('input', function() { 
      this.value = textTransform(this.value); 
    }); 
 
    var tr = {"а":"a","б":"b","в":"v","ґ":"g","г":"g","д":"d","е":"e","ё":"e","є":"ye","ж":"zh","з":"z","и":"i","і":"i","ї":"yi","й":"i","к":"k","л":"l","м":"m","н":"n","о":"o","п":"p","р":"r","с":"s","т":"t","у":"u","ф":"f","x":"h","ц":"c","ч":"ch","ш":"sh","щ":"sh'","ъ":"","ы":"i","ь":"","э":"e","ю":"yu","я":"ya"}; 
      
    var spaceReplacement = '-'; 
 
 
    function textTransform(str){ 
      if (str === null || str === undefined || str === "") { 
        return ""; 
      } 
      var new_str = ""; 
      for (var i = 0; i < str.length; i++) { 
                    var strLowerCase = str[i].toLowerCase(); 
                    if (strLowerCase === " ") { 
                        new_str += spaceReplacement; 
                        continue; 
                    } 
                    if (!tr[strLowerCase]) { 
                        new_str += strLowerCase; 
                    } else { 
                        new_str += tr[strLowerCase]; 
                    } 
       } 
       return new_str; 
    } 
 
 
    
<input type="text" id="input">

Answer 3

все довольно просто:

$( "#xf_artist" ).change(function() {
  var valchng = $(this).val();
  $(this).val(valchng.replace(" ", "-"));
});

можно сократить и уместить все в одной строке внутри функции, специально оставил так для наглядности.

upd: спасибо Игорь, описался с this, поправил.

READ ALSO
jQuery.getJSON() возвращает не те данные

jQuery.getJSON() возвращает не те данные

Здравствуйте уважаемые знатоки, вопрос такой: Мне на сайте WP в sidebar нужно вывести 2 виджета, для этого я использую разные файлы JS в которых...

189
Как закрыть VideoCapture в EmguCV

Как закрыть VideoCapture в EmguCV

В первый раз все считывается нормальноВо второй уже программа закрывается

166
Организация потоков TCPClient

Организация потоков TCPClient

Я занимаюсь разработкой игрового сервераЧерез TCPListener я принимаю клиентов

186
Сортировка методов в коде

Сортировка методов в коде

Имеет ли Visual Studio средства с помощью которых можно было бы выполнить сортировку методов в коде? Например, по алфавиту, по доступу и т п?

184