JavaScript: конвертировать хинди в арабский c один на лету при наборе текста ввода - PullRequest
1 голос
/ 23 января 2020

Я пытаюсь создать код JavaScript для преобразования чисел хинди [١،٢،٣،٤،٥،٦] в арабский c цифр [1,2,3,4,5,6] в летать. Это означает, что я пытаюсь преобразовать числа, чтобы было проще для языков программирования. Проблема в том, что я когда-либо делаю, я не могу избавиться от последнего нажатия ди git на хинди, поэтому, когда я нажимаю ٢, я могу изменить его на 2, но что произойдет, я получу ٢2 в то же время. Пожалуйста, дайте мне знать, как реализовать это так, чтобы, если пользователь вводит ١٠٠ в текстовое поле, он конвертировал бы его в 100, точно так же, как он фактически набирает 100 с клавиатуры.

После слишком многих попыток я остановился здесь, который не делает то, что я хочу

var digits = [1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1632];
var d = "";
function convert(event) {
    var x = event.which || event.charCode;
    var i = document.getElementById("barCode").value.length;

    if(digits.includes(x)){
        document.getElementById("barCode").value = String.fromCharCode(x - 1584);
    }

    console.log(i);
}
<p>A function is triggered when the user is pressing a key in the input field.</p>

<input type="text" id="barCode" keyup="convert(event)">

1 Ответ

1 голос
/ 23 января 2020

Вы можете использовать map , но тогда вход должен быть массивом, и вы можете использовать split для этого. В конце мы снова возвращаем его в строку с join:

var hindi = ['٠','١','٢','٣','٤','٥','٦','٧','٨','٩'];
var arabic = [0,1,2,3,4,5,6,7,8,9];

function translate(input) {
   var array = input.split('');
   array.map(function(value, i, array) {
     if (hindi.indexOf(array[i]) >= 0) {
       array[i] = arabic[hindi.indexOf(array[i])];
     }
   });
   return array.join('');
}

// Example of input
console.log(translate('١٠٠')); // 100

Теперь вы можете использовать функцию преобразования для вызова:

var hindi = ['٠','١','٢','٣','٤','٥','٦','٧','٨','٩'];
var arabic = [0,1,2,3,4,5,6,7,8,9];

function translate(input) {
   var array = input.split('');
   array.map(function(value, i, array) {
     if (hindi.indexOf(array[i]) >= 0) {
     	array[i] = arabic[hindi.indexOf(array[i])];
     }
   });
   return array.join('');
}

function convert(event) {
    var barcode = document.getElementById("barCode");
    var val = barcode.value;
    barcode.value = translate(val);
}
<input type="text" id="barCode" onkeyup="convert(event)">

Кроме того, вы можете видеть, как он работает в этом codepen .

...