Javascript 仅针对指定的div将英语数字转换为波斯语/阿拉伯语

Javascript 仅针对指定的div将英语数字转换为波斯语/阿拉伯语,javascript,jquery,css,Javascript,Jquery,Css,我知道这个问题在这里已经被回答了很多次,但我仍然没有得到确切的答案。。我需要通过一些javascript将英语字母转换为波斯语/阿拉伯语字母,但不是整个页面,而是一个div或更多。只针对特定的类 我遇到过这些代码,但不知道哪一个是最好的使用 function convert($string) { $persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'); $num = range(0, 9); r

我知道这个问题在这里已经被回答了很多次,但我仍然没有得到确切的答案。。我需要通过一些javascript将英语字母转换为波斯语/阿拉伯语字母,但不是整个页面,而是一个div或更多。只针对特定的类

我遇到过这些代码,但不知道哪一个是最好的使用

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)];
            // });
        })