代码之家  ›  专栏  ›  技术社区  ›  Abdallah Ghrb

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

  •  1
  • Abdallah Ghrb  · 技术社区  · 8 年前

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

    但是,有没有办法申请 东阿拉伯数字。 我正在寻找以下内容:

    '١٢٣'+'١١٢'==235
    '١٢٣'-'١١٢'==-11
    'Ù¢'*'Ù£'==6
     'Ù¡'==='Ù¢'   //false
    
    2 回复  |  直到 8 年前
        1
  •  5
  •   Abdennour TOUMI    8 年前

    你可以扩展 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
        2
  •  1
  •   Arnauld    8 年前

    你也可以使用这个简单的方法。然而,如果无法控制输入,它将受到不受信任的代码注入的影响。

    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")'));