Javascript 仅针对指定的div将英语数字转换为波斯语/阿拉伯语
我知道这个问题在这里已经被回答了很多次,但我仍然没有得到确切的答案。。我需要通过一些javascript将英语字母转换为波斯语/阿拉伯语字母,但不是整个页面,而是一个div或更多。只针对特定的类 我遇到过这些代码,但不知道哪一个是最好的使用Javascript 仅针对指定的div将英语数字转换为波斯语/阿拉伯语,javascript,jquery,css,Javascript,Jquery,Css,我知道这个问题在这里已经被回答了很多次,但我仍然没有得到确切的答案。。我需要通过一些javascript将英语字母转换为波斯语/阿拉伯语字母,但不是整个页面,而是一个div或更多。只针对特定的类 我遇到过这些代码,但不知道哪一个是最好的使用 function convert($string) { $persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'); $num = range(0, 9); r
function convert($string) {
$persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
$num = range(0, 9);
return str_replace($persian, $num, $string);
}
我只需要在一个div类上实现这个源代码
例如:
<div class="demo">12345</div>
12345
应改为
<div class="demo">۱۲۳۴۵</div>
我认为您提供的两个代码示例都不是JavaScript,第一个在语法上很接近,但是缺少
数组定义上的range()
方法和new
。第二个是Java
为了实现您所需要的功能,您可以将要转换的每个HTML元素的文本转换为一个数组,并逐步遍历它们,通过正则表达式检查每个字符以查看是否找到数字。如果是,您可以在重新连接阵列之前进行简单的替换。大概是这样的:
import {NumberConverter} from './NumberConverter';
NumberConverter(10)
var arabicNumbers=[“۰”、“١”、“٣”、“٤”、“٥”、“٦”、“٧”、“٩”];
$('.translate').text(函数(i,v){
var chars=v.分割(“”);
对于(变量i=0;i
390981中包含123个数字的虚拟文本。
109209734.09中包含67898个数字的虚拟文本。
尝试使用angularJS版本,它有很多功能
{{vm.value | pNumber}
注意:此解决方案非常易于使用,但基于angularJS。您可以使用我从中复制的ConvertToPersianMember函数,并将其用作jQuery中的以下代码
$('.translate').text(function(i, v) {
return convertToPersianNumber(v)
})
convertToPersianNumber代码
var persianDigits=“۰۱۳۴۶۷۸۹”;
var persianMap=persianDigits.split(“”);
函数转换为英语数字(输入){
返回输入。替换(/[\u06F0-\u06F90]/g,函数(m){
返回persianDigits.indexOf(m);
});
}
函数转换器PersianNumber(输入){
返回输入。替换(/\d/g,函数(m){
返回波斯地图[parseInt(m)];
});
}
//测验
console.log(转换为英语编号(“console.log”);
console.log(转换为英语编号(“console.log”);
console.log(转换为英语编号(“console.log”);
log(convertToPersianNumber(“216541”);
log(convertToPersianNumber(“16549”);
log(convertToPersianNumber(“84621”)代码>要在React中使用,请使用此组件
import React, {Component} from "react";
class PersianNumber extends Component {
render() {
let en_number = this.props.number.toString();
let persianDigits = "۰۱۲۳۴۵۶۷۸۹";
let persianMap = persianDigits.split("");
let persian_number = en_number.replace(/\d/g, function (m) {
return persianMap[parseInt(m)];
});
return (
<span>{persian_number}</span>
)
}
}
export default PersianNumber
我认为这有助于:
const arabicNumbers = ['۰', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
const ThirtyNine = 39;
const convertToArabic = (number) => {
return String(number).split('').map(char => arabicNumbers[Number(char)]).join('');
}
const inArabic = convertToArabic(ThirtyNine);
要转换数字字符,只需将两组Unicode字符之间的差加/减为原始数字即可。以下是一个例子:
//英语到波斯语/阿拉伯语
console.log(
“现在是波斯语:”,
“12345”。替换(/[0-9]/g,c=>String.fromCharCode(c.charCodeAt(0)+1728))
);
//波斯语/阿拉伯语转英语
console.log(
“英语现在:”,
“۵۶۷۸۹”。替换(/[۰-۹]/g,c=>String.fromCharCode(c.charCodeAt(0)-1728))
);代码>在React Native中:
我创建了一个函数,可以根据语言方向双向转换数字:
import React from 'react';
import {I18nManager} from 'react-native';
const isRTL = I18nManager.isRTL; //check app direction
export function NumberConverter(number){
if(!isRTL){
//english language
const digit = (number.toString()).replace('.', ',')
const id= '0123456789';
return (digit.replace(/[۰-۹]/g, function(w){
return id[w]}))
} else{
//Arabic Language
const digit = (number.toString()).replace('.', ',')
var id = '٠١٢٣٤٥٦٧٨٩';
return (digit.replace(/[0-9]/g, function (w) {
return id[w]}))
}
}
然后像这样使用它:
import {NumberConverter} from './NumberConverter';
NumberConverter(10)
您可以尝试以下功能:
translateFunction: function(number){
var looper = ['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'];
var englishDigits = Array.from(String(number), Number);
var farsiDigits = [];
englishDigits.forEach(digit => {
farsiDigits.push(looper[digit]);
});
console.log(farsiDigits.join(""));
}
我们采取的步骤是:
我们定义了一个名为looper的数组,用它的项替换英文数字
我们将字符串参数(如“123”)转换为数组。据我所知,我们不能在数字或字符串上使用forEach,所以我们应该将其转换为数组
我们定义一个空数组来获得最终结果
最重要的部分是,我们遍历数组,并根据它如何成为looper项的索引,将数组中的每个数字推送到farsidigit中
我知道这段代码可以写得更好,但这是我现在想到的东西,我希望它能有所帮助 在VUE中使用自定义过滤器,以备需要
Vue.filter('NumToPer', function (input) {
return input.replace(/[0-9]/g, c => String.fromCharCode(c.charCodeAt(0) + 1728));
**OR USE THIS ONE**
// var persianDigits = "۰۱۲۳۴۵۶۷۸۹";
// var persianMap = persianDigits.split("");
// return input.replace(/\d/g, function(m) {
// return persianMap[parseInt(m)];
// });
})
非常感谢,它很有魅力。我也许应该提到,我在第一篇文章中给出的数字不是阿拉伯语,而是波斯语,但我会编辑你的文章,希望没问题。:)没问题,很乐意帮忙。编辑很好-我从你的标题猜到了语言:)伙计,我发现代码有问题。当我加载页面时,它首先显示英文数字,然后切换到阿拉伯语。它运行得非常快,但它很烦人,因为它从左向右移动,作为一名开发人员,我注意到了它,它真的很烦人。有什么要做的吗?不幸的是没有,因为JS代码只在加载HTML时运行。要完全阻止原始数字出现,您需要在服务器上进行翻译,但这取决于您使用的语言和存储数据的方式。或者您可以接受该男子的回答,并从该问题中提出另一个问题,以便有人能够回答:)这些۴
,۵
和۶
是波斯人吗?我认为最好的方法是使用一种以波斯语形式显示数字的字体,只需更改该元素的字体系列。很好,很简单:)
Vue.filter('NumToPer', function (input) {
return input.replace(/[0-9]/g, c => String.fromCharCode(c.charCodeAt(0) + 1728));
**OR USE THIS ONE**
// var persianDigits = "۰۱۲۳۴۵۶۷۸۹";
// var persianMap = persianDigits.split("");
// return input.replace(/\d/g, function(m) {
// return persianMap[parseInt(m)];
// });
})