使用Javascript将运算符(+, - ,*,/)应用于东部阿拉伯数字

时间:2016-08-05 14:14:29

标签: javascript numbers operators arabic

已找到许多答案,如何将东部阿拉伯数字(٠١٢٣٤٥٦٧٨)转换为西方阿拉伯数字(01234567)&反之亦然。

但是,有没有办法在东部阿拉伯数字上应用数学运算符。 我正在寻找以下内容:

'١٢٣'+'١١٢'==235
'١٢٣'-'١١٢'==-11
'٢'*'٣'==6
 '١'==='٢'   //false

2 个答案:

答案 0 :(得分:5)

你可以扩展Number课程&覆盖valueOf方法(基于ES6的解决方案)

class EANum extends Number{
     constructor(){
         super();
         this.value=arguments[0];
     }
    valueOf(){
       return  Number( this.value.replace(/[٠١٢٣٤٥٦٧٨٩]/g,(d)=> d.charCodeAt(0) - 1632).replace(/[۰۱۲۳۴۵۶۷۸۹]/g, (d)=> d.charCodeAt(0) - 1776));
    }
    toString(){
       return this.valueOf();
    }

}

var a=new EANum('٣٤'),b=new EANum('١١');
console.log(a); // 
console.log(a+b); //45
console.log(a-b); //23
console.log(a*b); //374

答案 1 :(得分:1)

您也可以使用这种简单的方法。但是,如果无法控制输入,则会受到不受信任的代码注入。

function evalArabic(expr) {
  var fn = new Function(
    'return (' + expr.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function(c) {
      return c.charCodeAt(0) - 0x660;
    }) + ')'
  );  
  return fn();
}

console.log(evalArabic('١٢٣ + ١١٢'));
console.log(evalArabic('١٢٣ - ١١٢'));
console.log(evalArabic('٢ * ٣'));
console.log(evalArabic('١ === ٢'));

// this one is bad:
// console.log(evalArabic('alert("p4wn3d! lol")'));