将英文数字转换为波斯语

时间:2016-07-28 04:18:36

标签: javascript php html

我使用以下JavaScript将我网站上显示的所有英文数字转换为波斯语。

我意识到有几种方法可以解决这个问题,我已经在线查看了一些,但是,这个脚本做了我想做的事情,除了我想要的电话号码和日期之外它真的很容易实现在我的页脚中被排除在转换之外并保持英语。

我不确定如何在PHP / HTML页面中进行此操作。

在第二个注释中,当我的网站加载几秒钟时,数字会以英文显示,并迅速转换为波斯语。只是想知道我是否有办法减少这种延迟?

这是我的代码:



<script language="JavaScript" type="text/javascript">
var replaceDigits = function() {
var map =
[
"&\#1776;","&\#1777;","&\#1778;","&\#1779;","&\#1780;",
"&\#1781;","&\#1782;","&\#1783;","&\#1784;","&\#1785;"
]
document.body.innerHTML =
document.body.innerHTML.replace(
/\d(?=[^<>]*(<|$))/g,
function($0) { return map[$0] }
);
}
</script>

<script type="text/javascript">
window.onload = replaceDigits
</script>
&#13;
&#13;
&#13;

9 个答案:

答案 0 :(得分:9)

这是PHP函数:

<div id="modal-form-submit" class="modal">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                    <h4 class="blue bigger"> DEMO MODEL FORM </h4>
                </div>
                <div class="modal-body">
                    <div class="row">
                        <div class="col-sm-12 col-xs-12">
                            <div class="form-group">
                                <label class="control-label" for="toitems">To:</label>
                                <div class="tags full-width">
                                    <span class="tag" ng-repeat="tag in tags">{{ tag.Description }}</span>
                                </div>
                            </div>
                        </div>
                    </div>                        
                </div>
                <hr />
                <div class="modal-footer">
                    <button class="btn btn-sm" data-dismiss="modal">
                        <i class="ace-icon fa fa-times"></i>
                        Cancel
                    </button>
                    <button class="btn btn-sm btn-primary " ng-disabled="!ItemCode || !ItemDescription"
                            ng-click="SaveEntireFormData()" type="button">
                        <i class="ace-icon fa fa-check"></i>
                        Confirm
                    </button>
                </div>
            </div>
        </div>
    </div>

使用:

function toPersianNum($number)
    {
        $number = str_replace("1","۱",$number);
        $number = str_replace("2","۲",$number);
        $number = str_replace("3","۳",$number);
        $number = str_replace("4","۴",$number);
        $number = str_replace("5","۵",$number);
        $number = str_replace("6","۶",$number);
        $number = str_replace("7","۷",$number);
        $number = str_replace("8","۸",$number);
        $number = str_replace("9","۹",$number);
        $number = str_replace("0","۰",$number);
        return $number;
    }

<强>的JavaScript

这是JavaScript函数:

$fa_num = toPersianNum(1234); // It returns ۱۲۳۴
$fa_date = toPersianNum('2016/05/10'); // It returns ۲۰۱۶/۰۵/۱۰

使用:

function toPersianNum( num, dontTrim ) {

    var i = 0,

        dontTrim = dontTrim || false,

        num = dontTrim ? num.toString() : num.toString().trim(),
        len = num.length,

        res = '',
        pos,

        persianNumbers = typeof persianNumber == 'undefined' ?
            ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'] :
            persianNumbers;

    for (; i < len; i++)
        if (( pos = persianNumbers[num.charAt(i)] ))
            res += pos;
        else
            res += num.charAt(i);

    return res;
}

快乐:)

<强>更新

以下是var fa_num = toPersianNum(1234) // It returns ۱۲۳۴ var fa_date = toPersianNum('2016/05/10'); // It returns ۲۰۱۶/۰۵/۱۰

PHP:

toEnglishNum()

使用Javascript:

function toEnglishNum($number)
{
    $number = str_replace("۱","1",$number);
    $number = str_replace("۲","2",$number);
    $number = str_replace("۳","3",$number);
    $number = str_replace("۴","4",$number);
    $number = str_replace("۵","5",$number);
    $number = str_replace("۶","6",$number);
    $number = str_replace("۷","7",$number);
    $number = str_replace("۸","8",$number);
    $number = str_replace("۹","9",$number);
    $number = str_replace("۰","0",$number);
    return $number;
}

祝你好运

答案 1 :(得分:5)

你在这里:)

address/ID

另一个版本!

function toFarsiNumber(n) {
    const farsiDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];

    return n
      .toString()
      .split('')
      .map(x => farsiDigits[x])
      .join('');
  }

答案 2 :(得分:1)

希望这段代码能帮到你。

'12345'.replace(/[0-9]/g, c => String.fromCharCode(c.charCodeAt(0) + 1728))

答案 3 :(得分:0)

您正在window.onload上调用 replaceDigits 函数,该函数在您的页面加载时运行。这就是你在转换时注意到延迟的原因。

有一些方法可以使用Javascript处理它,但我想最好的方法是转换PHP方面的数字。

答案 4 :(得分:0)

在faToEnDigits中输入任何波斯数字,它会向您返回英文数字。

faToEnDigits(۱۲۳۴) => 1234

enToFaDigits(1234) => ۱۲۳۴
var faToEnDigits = function (input) {
        if (input == undefined)
            return;
        var returnModel = "", symbolMap = {
            '۱': '1',
            '۲': '2',
            '۳': '3',
            '۴': '4',
            '۵': '5',
            '۶': '6',
            '۷': '7',
            '۸': '8',
            '۹': '9',
            '۰': '0'
        };
        input = input.toString();
        for (var i = 0; i < input.length; i++)
            if (symbolMap[input[i]])
                returnModel += symbolMap[input[i]];
            else
                returnModel += input[i];
        return returnModel;
}

var enToFaDigits = function (input) {
        if (input == undefined)
            return;
        var returnModel = "", symbolMap = {
            '1': '۱',
            '2': '۲',
            '3': '۳',
            '4': '۴',
            '5': '۵',
            '6': '۶',
            '7': '۷',
            '8': '۸',
            '9': '۹',
            '0': '۰'
        };
        input = input.toString();
        for (var i = 0; i < input.length; i++)
            if (symbolMap[input[i]])
                returnModel += symbolMap[input[i]];
            else
                returnModel += input[i];
        return returnModel;
    };

答案 5 :(得分:0)

以下方法将所有阿拉伯数字替换为英语数字,然后将所有英语数字替换为波斯数字:

function (value) {
    for (var index = 0; index < 10; index++)
        value = value.replace(String.fromCharCode(index + 1632), index.toString()[0]);
    for (var index = 0; index < 10; index++)
        value = value.replace(index.toString()[0], String.fromCharCode(index + 1776));

    return value;
}

答案 6 :(得分:0)

PHP =>

最好的方法是:

strtr(number_format($price), array('0' => '۰', '1' => '۱', '2' => '۲', '3' => '۳', '4' => '۴', '5' => '۵', '6' => '۶', '7' => '۷', '8' => '۸', '9' => '۹'));

答案 7 :(得分:0)

尝试 Persian-tools 一个很棒的 JavaScript 库以及许多其他有用的功能。

import { digitsArToFa, digitsArToEn, digitsEnToFa, digitsFaToEn } from "persian-tools2";

digitsArToFa("٠١٢٣٤٥٦٧٨٩"); // "۰۱۲۳۴۵۶۷۸۹"
digitsArToFa("۸۹123۴۵"); // "۸۹123۴۵"
digitsArToFa(456128); // "456128"
digitsArToFa("Text ٠١٢٣٤٥٦٧٨٩"); // "Text ۰۱۲۳۴۵۶۷۸۹"

digitsArToEn("٠١٢٣٤٥٦٧٨٩"); // "0123456789"
digitsArToEn("٨٩123٤٥"); // "8912345"
digitsArToEn(456128); // "456128"

digitsArToEn("Text ٠١٢٣٤٥٦٧٨٩"); // "Text 0123456789"

digitsEnToFa("123۴۵۶"); // "۱۲۳۴۵۶"
digitsEnToFa("٤٥٦"); // "٤٥٦"
digitsEnToFa("123۴۵۶"); // "۱۲۳۴۵۶"

digitsFaToEn("123۴۵۶"); // "123456"
digitsFaToEn("۸۹123۴۵"); // "8912345"
digitsFaToEn("۰۱۲۳۴۵۶۷۸۹"); // "0123456789"

答案 8 :(得分:0)

答案太简单了

const a = 1234567890
console.log(new Number(a).toLocaleString('fa-ir')) //۱۲۳۴۵۶۷۸۹۰