使用 Javascript 将运算符(+、-、*、/)应用于东方阿拉伯数字
Apply operators (+, -, *, /) to Eastern Arabic numbers using Javascript
关于如何将东方阿拉伯数字 (٠١٢٣٤٥٦٧٨
) 转换为西方阿拉伯数字 (01234567
) 以及反之的答案很多。
但是,有没有办法对东方阿拉伯数字应用数学运算符。
我正在寻找类似以下内容的内容:
'١٢٣'+'١١٢'==235
'١٢٣'-'١١٢'==-11
'٢'*'٣'==6
'١'==='٢' //false
您可以扩展 Number
class 并覆盖 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
你也可以使用这个简单的方法。但是,如果无法控制输入,它将受到不受信任的代码注入的影响。
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")'));
关于如何将东方阿拉伯数字 (٠١٢٣٤٥٦٧٨
) 转换为西方阿拉伯数字 (01234567
) 以及反之的答案很多。
但是,有没有办法对东方阿拉伯数字应用数学运算符。 我正在寻找类似以下内容的内容:
'١٢٣'+'١١٢'==235
'١٢٣'-'١١٢'==-11
'٢'*'٣'==6
'١'==='٢' //false
您可以扩展 Number
class 并覆盖 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
你也可以使用这个简单的方法。但是,如果无法控制输入,它将受到不受信任的代码注入的影响。
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")'));