首页 > 解决方案 > 如何将波斯/阿拉伯数字从字符串转换为英文数字?

问题描述

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

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

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

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

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


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

标签: php

解决方案


我在laravel中使用正则表达式搜索了很多使用波斯字符(如1234)验证波斯电话号码,但没有找到合适的答案,所以我决定将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('فرمت شماره موبایل باید عدد و ۱۱ رقم باشد');
            }
        }

推荐阅读