在JavaScript中转换数字的解决方案和正确方法是什么?

问题描述 投票:0回答:1

遵循 Stackoverflow 中有关在 javascript 中转换数字的所有问答。但是,我有一个问题/疑问

方法一

    // Function to convert Persian and Arabic digits to English digits
    function convertDigitsToEnglish(value) {
        var persianDigits = '۰۱۲۳۴۵۶۷۸۹';
        var arabicDigits = '٠١٢٣٤٥٦٧٨٩';
        var englishDigits = '0123456789';

        for (var i = 0; i < 10; i++) {
            value = value.replace(new RegExp(persianDigits[i], 'g'), englishDigits[i]);
            value = value.replace(new RegExp(arabicDigits[i], 'g'), englishDigits[i]);
        }

        return value;
    }

方法二

var convert_number = (function () {
    var numerals = {
        persian: ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"],
        arabic: ["٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"]
    };

    return {
        toNormal: function (str) {
            if (!str) {
                return '';
            }
            var num, i, len = str.length, result = "";

            for (i = 0; i < len; i++) {
                num = numerals["persian"].indexOf(str[i]);
                num = num != -1 ? num : numerals["arabic"].indexOf(str[i]);
                if (num == -1) num = str[i];
                result += num;
            }
            return result;
        }
    }
}

在该方法中,一种仅适用于波斯语/波斯语数字!为什么它对于阿拉伯语根本不能正常工作? 阿拉伯数字

٤٥٦‍
(四五和六)数字不会转换为英语/拉丁数字。我们在代码中定义了这个,它不应该是一个问题,它应该可以正常工作,但事实并非如此,这三个数字无法转换,并且不接受这些数字!

方法二。波斯语和阿拉伯语都已转换,使用此方法没有问题。

为了更好地解释我的问题,以免遗漏任何内容。假设这是一个手机号码字段。 我还在其他地方指定过,除了数字 0 到 9 之外,键盘上的人不能输入任何其他字符,例如星号、加号、减号等。

        // Remove non-numeric characters
        var numericPhoneValue = convertedValue.replace(/[^0-9]/g, '');

为了让阿拉伯数字和波斯数字不被识别为外国数字,我用这个(上转换函数)将它们转换为英文数字。这样用户就可以输入英文、波斯语和阿拉伯数字的数字。不管它是什么语言。转换为任何数字的英语。此外,还可以防止输入其他字符。

我也使用了模式解决方案来代替这些(转换),但是在不同情况下它会被浏览器忽略,而且它也只适用于英语。而且它不适合波斯语和阿拉伯语。 我的方法正确吗?有没有更好、更短、更干净的方法?为什么第一种方法对于某些阿拉伯数字不能正确工作?但是第二种方法正确吗?

javascript keyboard numbers number-formatting
1个回答
0
投票

我很厚,你可以使用一些东西

function toEnglishDigits(str) {
  const persianNumbers = ["۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹", "۰"]
  const arabicNumbers = ["١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩", "٠"]
  const englishNumbers = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
  
  return str.split("").map(c => englishNumbers[persianNumbers.indexOf(c)] ||
      englishNumbers[arabicNumbers.indexOf(c)] || c).join("")
}

toEnglishDigits("۶٦۵any٥32") 

这适用于波斯语和阿拉伯数字

© www.soinside.com 2019 - 2024. All rights reserved.