如何将字符串中的波斯/阿拉伯数字转换为英文数字?

时间:2018-11-15 15:33:22

标签: php

我有一个波斯语网站。我网站用户的键盘通常使用波斯语(或阿拉伯语)。因此,有时他们的密码不会匹配。

我有一个用于其用户名(手机号码)的功能,该功能可将波斯/阿拉伯数字转换为英语:

function convert_digits_to_en($entry){
    $fmt = numfmt_create('fa', NumberFormatter::DECIMAL);
    return numfmt_parse($fmt, $entry);
}

如果条目包含所有数字,它将起作用。

۰۹۱۲۳۵۶۵۴۹۸也将转换为09123565498


问题是当条目同时包含字符和数字(例如密码)时。即test۰۹۱۲。我需要将其转换为test0912。我当前的函数为此条目返回一个empty string。知道怎么解决吗?

3 个答案:

答案 0 :(得分:2)

我在laravel中使用正则表达式搜索了很多验证波斯字符的波斯电话号码,例如 ۱۲۳۴ 但没有找到合适的答案,所以我决定将peisan号码更改为英语并在我自己验证,这对我帮助很大,希望这会有所帮助:

if (is_numeric($mobile) && strlen($mobile) == 11) {
      // if number in english
      }else{
            $mobile = str_split($mobile , 2);
            if (count($mobile) != 11) {
                return redirect()->back()->withErrors('فرمت شماره موبایل باید عدد و ۱۱ رقم باشد');
            }
            foreach ($mobile as $key => $number) {
                if ($number == '۰') {
                    $mobile[$key] = 0;
                }elseif ($number == '۱') {
                    $mobile[$key] = 1;
                }elseif ($number == '۲') {
                    $mobile[$key] = 2;
                }elseif ($number == '۳') {
                    $mobile[$key] = 3;
                }elseif ($number == '۴') {
                    $mobile[$key] = 4;
                }elseif ($number == '۵') {
                    $mobile[$key] = 5;
                }elseif ($number == '۶') {
                    $mobile[$key] = 6;
                }elseif ($number == '۷') {
                    $mobile[$key] = 7;
                }elseif ($number == '۸') {
                    $mobile[$key] = 8;
                }elseif ($number == '۹') {
                    $mobile[$key] = 9;
                }
            }
            $mobile = implode($mobile);
            if(is_numeric($mobile) == false){
                return redirect()->back()->withErrors('فرمت شماره موبایل باید عدد و ۱۱ رقم باشد');
            }
        }

答案 1 :(得分:0)

一个非正则表达式的解决方案是这样的:

function convert_digits_to_en($input)
{
  $arabic = ['۰' => 0, '۱' => 1];

  return strtr($input, $arabic);
}

echo convert_digits_to_en('test۱۰۰'); // test100

注意:您需要将数字添加到该数组中,我的波斯语/阿拉伯语不太好。

实时示例

Repl

阅读材料

strtr

答案 2 :(得分:0)

您可以将您的字符串用作数组并像这样迭代它们:

function convert_digits_to_en($entry){
  $result = '';
  $fmt = numfmt_create('fa', NumberFormatter::DECIMAL);
  foreach((array)$entry as $value){
    $transform_digit = numfmt_parse($fmt, $value);;
    $result = empty($transform_digit) ? $value : $transform_digit;
  }
  return $result;
}