遵循 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, '');
为了让阿拉伯数字和波斯数字不被识别为外国数字,我用这个(上转换函数)将它们转换为英文数字。这样用户就可以输入英文、波斯语和阿拉伯数字的数字。不管它是什么语言。转换为任何数字的英语。此外,还可以防止输入其他字符。
我也使用了模式解决方案来代替这些(转换),但是在不同情况下它会被浏览器忽略,而且它也只适用于英语。而且它不适合波斯语和阿拉伯语。 我的方法正确吗?有没有更好、更短、更干净的方法?为什么第一种方法对于某些阿拉伯数字不能正确工作?但是第二种方法正确吗?
我很厚,你可以使用一些东西
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")
这适用于波斯语和阿拉伯数字