Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将字符串转换为波斯语数字格式_Php_Regex_String_Number Formatting - Fatal编程技术网

Php 将字符串转换为波斯语数字格式

Php 将字符串转换为波斯语数字格式,php,regex,string,number-formatting,Php,Regex,String,Number Formatting,例如,我有一个波斯语数字字符串 ۱۱۱۱۱۱۲۴ 英文数字为1125120124。例如,我想将这个字符串转换为数字格式,每千个字符之间用逗号分隔 ۱,۱,۱,۲,۱ 就像我做的那样 number_format(1125120124); // it returns as 1,125,120,124 及 所以实际上,我希望得到与number_格式方法类似的结果。我刚开始使用正则表达式。尝试了非常基本的模式,但仍然没有在附近。尝试拆分字符串并再次用逗号连接,但似乎不是正确的方法。我有一个函数,在这里

例如,我有一个波斯语数字字符串

۱۱۱۱۱۱۲۴

英文数字为1125120124。例如,我想将这个字符串转换为数字格式,每千个字符之间用逗号分隔

۱,۱,۱,۲,۱

就像我做的那样

number_format(1125120124); // it returns as 1,125,120,124

所以实际上,我希望得到与number_格式方法类似的结果。我刚开始使用正则表达式。尝试了非常基本的模式,但仍然没有在附近。尝试拆分字符串并再次用逗号连接,但似乎不是正确的方法。我有一个函数,在这里我传递一个数字,这个数字用波斯语字符返回给我。也分享这一点

function trans($num)
{
    $persian_num_array = [
    '0'=>'۰',
    '1'=>'۱',
    '2'=>'۲',
    '3'=>'۳',
    '4'=>'۴',
    '5'=>'۵',
    '6'=>'۶',
    '7'=>'۷',
    '8'=>'۸',
    '9'=>'۹',
];
    $translated_num = '';
    $temp_array=[];
    while ($num > 0) {
        array_push($temp_array,$num % 10);
        $num = intval($num / 10);
    }

    foreach($temp_array as $val){
        $translated_num.= $persian_num_array[array_pop($temp_array)];
    }
    echo $translated_num;

}

由于转换为波斯语只是字符替换,所以可以使用内置的number_format()函数格式化数字,然后替换数字而不替换逗号。以下是一个例子:

function trans($num)
{
    $persian_num_array = [
        '0'=>'۰',
        '1'=>'۱',
        '2'=>'۲',
        '3'=>'۳',
        '4'=>'۴',
        '5'=>'۵',
        '6'=>'۶',
        '7'=>'۷',
        '8'=>'۸',
        '9'=>'۹',
    ];

    $num = (float) $num;
    return strtr(number_format($num), $persian_num_array);
}

echo trans(1125120124); // returns ۱,۱۲۵,۱۲۰,۱۲۴

由于转换为波斯语只是字符替换,所以可以使用内置的number_format()函数格式化数字,然后替换数字而不替换逗号。以下是一个例子:

function trans($num)
{
    $persian_num_array = [
        '0'=>'۰',
        '1'=>'۱',
        '2'=>'۲',
        '3'=>'۳',
        '4'=>'۴',
        '5'=>'۵',
        '6'=>'۶',
        '7'=>'۷',
        '8'=>'۸',
        '9'=>'۹',
    ];

    $num = (float) $num;
    return strtr(number_format($num), $persian_num_array);
}

echo trans(1125120124); // returns ۱,۱۲۵,۱۲۰,۱۲۴
PHP的扩展包括一个类,该类可以为给定的语言环境设置数字格式

例子: 输出:
要强制使用逗号,它有一个方法

例子: 输出:
或者,如果您输入的是波斯语,请首先在其上使用a

例子: 输出: PHP的扩展包括一个类,该类可以为给定的语言环境设置数字格式

例子: 输出:
要强制使用逗号,它有一个方法

例子: 输出:
或者,如果您输入的是波斯语,请首先在其上使用a

例子: 输出:
那么,您有
$inpt='se1777;۱۱۱۱۱۲۴
,并且想要得到
$output=1125120124
?或者
$output=“1125120124”
?不,我有$input='1125120124',我将其更改为$temp_result='但$final_result应该是一个格式化的数字。比如“好的,把数字翻译成波斯语后,你可以用preg替换(“~\d(?=(\d{3})+(?!\d)),“$0”,“$temp”)。所以,你有
$inpt='1777; 1777; 1778;替换(“~-”、$0”,“$temp”)。
?或者
$output=“1125120124”
?不,我有$input='1125120124',我将其更改为$temp_result='但$final_result应该是一个格式化的数字。像“好的,在把数字翻译成波斯语后,你可以使用
preg\u replace(“~\d(?=(\d{3})+(?!\d)),“$0”,“$temp”)
。这很好,就我所理解的(从评论中)OP输入是一个字符串。所以,首先应该将其转换为一个数字。@Anton这很漂亮。谢谢java脚本中有类似的东西吗?@TalhaMalik我认为在Javascript上移植这个函数没有问题。看看这里:很好,就我所理解的(从注释中)OP输入是一个字符串。所以,首先应该将其转换为一个数字。@Anton这很漂亮。谢谢java脚本中有类似的东西吗?@TalhaMalik我认为在Javascript上移植这个函数没有问题。看看这里:谢谢。我检查了它,但我没有选择更改php.ini,所以没有尝试。谢谢你的示例代码。谢谢。我检查了它,但我没有选择更改php.ini,所以没有尝试。谢谢你的示例代码。
$number = "1125120124";
$formatter = NumberFormatter::create("fa_IR", NumberFormatter::DEFAULT_STYLE);
echo $formatter->format($number);
۱٬۱۲۵٬۱۲۰٬۱۲۴
$number = "1125120124";
$formatter = NumberFormatter::create("fa_IR", NumberFormatter::DEFAULT_STYLE);
$formatter->setSymbol(NumberFormatter::GROUPING_SEPARATOR_SYMBOL, ",");
echo $formatter->format($number);
۱,۱۲۵,۱۲۰,۱۲۴
$input = "۱۱۲۵۱۲۰۱۲۴";    
$transliterator = Transliterator::create("fa-fa_Latn/BGN");
$number = $transliterator->transliterate($input);
echo $number, "\n";

$formatter = NumberFormatter::create("fa_IR", NumberFormatter::DEFAULT_STYLE);
$formatter->setSymbol(NumberFormatter::GROUPING_SEPARATOR_SYMBOL, ",");
echo $formatter->format($number);
1125120124
۱,۱۲۵,۱۲۰,۱۲۴