在文本输入中仅将阿拉伯数字转换为英语



我发现这个函数在文本输入只有阿拉伯数字时可以完美地工作:

function parseArabic(){ // PERSIAN (فارسی), ARABIC (عربي) , URDU (اُردُو)
     var yas ="٠١٢٣٤٥٦٧٨٩";
     yas = Number(yas.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (d) {
         return d.charCodeAt(0) - 1632;                
         }).replace(/[۰۱۲۳۴۵۶۷۸۹]/g, function (d) { return d.charCodeAt(0) - 1776; })
     );
     alert(yas);
}

这里 yas 的警报值是"0123456789"。好的,很好,但是现在当我在同一变量中有其他字符可能是英语(字母和数字(和阿拉伯语(字母(时,我如何使用这个函数? Ex: "test ٠١٢٣٤٥٦٧٨٩ hello مرحبا " .我问这个是因为解析阿拉伯语只接受阿拉伯语数字进行翻译;其他人则被视为 NaN。

对于不想费力寻找Number的人(根据 OP 的答案(。这是更新的代码:

function parseArabic(){ // PERSIAN (فارسی), ARABIC (عربي) , URDU (اُردُو)
     var yas ="٠١٢٣٤٥٦٧٨٩";
     yas = (yas.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (d) {
         return d.charCodeAt(0) - 1632;                
         }).replace(/[۰۱۲۳۴۵۶۷۸۹]/g, function (d) { return d.charCodeAt(0) - 1776; })
     );
     alert(yas);
}

阿拉伯东部数字(包括波斯数字(转换为阿拉伯语西部(拉丁(数字的最短和简单方法是以下简短的代码行。

这也将用所需的拉丁小数点标记替换阿拉伯小数点"fasilah"(如果有(。

仅替换数字,但其他文本保持不变。

const numArFaToLatin=n=>n.replace(/[٠-٩۰-۹]/g,n=>15&n.charCodeAt(0)).replace(/٫/g,".").replace(/٬/g,"");

// ============== Test Cases =================
console.log(numArFaToLatin("۱۶٦٧۶۰"));                   // '166760'
console.log(numArFaToLatin("With decimal ۱۶۴٫۵۶"));      // With decimal 164.56
console.log(numArFaToLatin("٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹"));      // '01234567890123456789'
console.log(numArFaToLatin("Total is ١٢٣٤٠١"));          // 'Total is 123401'
console.log(numArFaToLatin("With decimal ١٬٢٣٤٫٠١"));     // 'Total is 1234.01'
console.log(numArFaToLatin("These are Numbers: ٠١٢٣٤٥٦٧٨٩"));   // 'These are Numbers: 0123456789'
console.log(numArFaToLatin("العدد واحد ١١١١١١ فقط "));        // 'العدد واحد 111111 فقط '
console.log(numArFaToLatin("١٩,٢٣٤٫٥٦"));                 // 19,234.56

最新更新