programing

페르시아/아랍 숫자를 영어 숫자로 변환

closeapi 2023. 7. 25. 20:57
반응형

페르시아/아랍 숫자를 영어 숫자로 변환

간단한 기능으로 페르시아어/아랍어 숫자를 영어 숫자변환하려면 어떻게 해야 합니까?

페르시아어/아랍어 숫자:

۰   //  -> 0
۱   //  -> 1
۲   //  -> 2
۳   //  -> 3
۴   //  -> 4
۵   //  -> 5
۶   //  -> 6
۷   //  -> 7
۸   //  -> 8
۹   //  -> 9

유니코드 위의 숫자:

$num0="۰";
$num1="۱";
$num2="۲";
$num3="۳";
$num4="۴";
$num5="۵";
$num6="۶";
$num7="۷";
$num8="۸";
$num9="۹";

다음은 간단한 기능입니다.

function convert($string) {
    $persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
    $arabic = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];

    $num = range(0, 9);
    $convertedPersianNums = str_replace($persian, $num, $string);
    $englishNumbersOnly = str_replace($arabic, $num, $convertedPersianNums);
    
    return $englishNumbersOnly;
}

의 문자 대신 유니코드를 사용할 수 있습니다.$persian(내 생각엔)

저는 이 기능을 사용합니다.페르시아어와 아랍어의 숫자를 모두 영어로 변환합니다.

function faTOen($string) {
    return strtr($string, array('۰'=>'0', '۱'=>'1', '۲'=>'2', '۳'=>'3', '۴'=>'4', '۵'=>'5', '۶'=>'6', '۷'=>'7', '۸'=>'8', '۹'=>'9', '٠'=>'0', '١'=>'1', '٢'=>'2', '٣'=>'3', '٤'=>'4', '٥'=>'5', '٦'=>'6', '٧'=>'7', '٨'=>'8', '٩'=>'9'));
}

샘플:

echo faTOen("۰۱۲۳۴۵۶۷۸۹٠١٢٣٤٥٦٧٨٩"); // 01234567890123456789

또한 동일한 방법으로 영어를 페르시아어로 변환할 수 있습니다.

function enToFa($string) {
    return strtr($string, array('0'=>'۰','1'=>'۱','2'=>'۲','3'=>'۳','4'=>'۴','5'=>'۵','6'=>'۶','7'=>'۷','8'=>'۸','9'=>'۹'));
}

또는 영어에서 아랍어로:

function enToAr($string) {
    return strtr($string, array('0'=>'٠','1'=>'١','2'=>'٢','3'=>'٣','4'=>'٤','5'=>'٥','6'=>'٦','7'=>'٧','8'=>'٨','9'=>'٩'));
}

페르시아와 아랍 지역의 사람들은 서로 키보드 유형을 사용할 수 있기 때문에, 이것이 두 유형을 변환하는 완벽한 솔루션입니다.

@palladium 답변을 기준으로 합니다.

function convert2english($string) {
    $newNumbers = range(0, 9);
    // 1. Persian HTML decimal
    $persianDecimal = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
    // 2. Arabic HTML decimal
    $arabicDecimal = array('٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩');
    // 3. Arabic Numeric
    $arabic = array('٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩');
    // 4. Persian Numeric
    $persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');

    $string =  str_replace($persianDecimal, $newNumbers, $string);
    $string =  str_replace($arabicDecimal, $newNumbers, $string);
    $string =  str_replace($arabic, $newNumbers, $string);
    return str_replace($persian, $newNumbers, $string);
}

이게 더 낫습니다.아랍어와 페르시아어의 두 가지 숫자가 있습니다.우리는 모든 것을 바꿔야 합니다.

function convert($string) {
    $persinaDigits1= array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
    $persinaDigits2= array('٩', '٨', '٧', '٦', '٥', '٤', '٣', '٢', '١', '٠');
    $allPersianDigits=array_merge($persinaDigits1, $persinaDigits2);
    $replaces = array('0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9');
    return str_replace($allPersianDigits, $replaces , $string);
}


팔라듐 감사합니다.

코드를 복사할 때 주의하세요!편집기에 배열이 표시되는 방식을 두 번 확인하십시오. 그렇지 않으면 문제가 발생합니다!

$fmt = numfmt_create('fa', NumberFormatter::DECIMAL);
echo numfmt_parse($fmt, "۵") . "\n";
// 5

모든 페르시아어 숫자를 영어 형식으로 변환하려면 다음 함수를 사용할 수 있습니다.

function Convertnumber2english($srting) {

        $srting = str_replace('۰', '0', $srting);
        $srting = str_replace('۱', '1', $srting);
        $srting = str_replace('۲', '2', $srting);
        $srting = str_replace('۳', '3', $srting);
        $srting = str_replace('۴', '4', $srting);
        $srting = str_replace('۵', '5', $srting);
        $srting = str_replace('۶', '6', $srting);
        $srting = str_replace('۷', '7', $srting);
        $srting = str_replace('۸', '8', $srting);
        $srting = str_replace('۹', '9', $srting);

        return $srting;
    }

두 가지 유용한 기능:

영문 숫자로 처음 변환:

function convert_to_en_number($string) {
    $persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
    $arabic = ['٩', '٨', '٧', '٦', '٥', '٤', '٣', '٢', '١','٠'];

    $num = range(0, 9);
    $convertedPersianNums = str_replace($persian, $num, $string);
    $englishNumbersOnly = str_replace($arabic, $num, $convertedPersianNums);

    return $englishNumbersOnly;
}

페르시아어 숫자로 두 번째 변환:

function convert_to_fa_number($string) {
    $num = range(0, 9);
    $arabic = ['٩', '٨', '٧', '٦', '٥', '٤', '٣', '٢', '١','٠'];
    $persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];

    $convertedEnglishNums = str_replace($num, $persian, $string);
    $persianNumbersOnly = str_replace($arabic, $persian, $convertedEnglishNums);

    return $persianNumbersOnly;
}

아래 기능을 사용하여 아랍어 숫자를 영어 숫자로 변환하는 매우 쉬운 방법:

function ArtoEnNumeric($string) {
    return strtr($string, array('۰'=>'0', '۱'=>'1', '۲'=>'2', '۳'=>'3', '۴'=>'4', '۵'=>'5', '۶'=>'6', '۷'=>'7', '۸'=>'8', '۹'=>'9', '٠'=>'0', '١'=>'1', '٢'=>'2', '٣'=>'3', '٤'=>'4', '٥'=>'5', '٦'=>'6', '٧'=>'7', '٨'=>'8', '٩'=>'9'));
}

echo ArtoEnNumeric('۶۰۶۳١۶۳٨'); 
Output = 60631638

저는 이것이 6년 전의 질문이라는 것을 알지만, 저는 이것을 우연히 발견했고 일반적인 해결책을 개발했습니다. 그리고 저는 이것을 미래의 독자들을 위해 여기서 공유하고 싶습니다.

기본적으로 는 번호를 사용합니다.어떤 외국어로도 숫자를 생성할 수 있도록 포맷한 다음, 저는 입력 문자열의 숫자를 영어의 숫자로 바꿉니다.

어떤 언어든 통해야 하지만 아랍어는 제가 썼습니다.

/**
 * Replace Arabic numbers by English numbers in a string
 *
 * @param $value string A string containing Arabic numbers.
 * @param $source_language string The locale to convert chars from.
 *
 * @return string The string with Arabic numbers replaced by English numbers
 */
function englishifyNumbers ($value, $source_language = 'ar') {
    // Remove any direction overriding chars [LRO (U+202D)]
    $value = trim($value);

    // Create an Arabic number formatter to generate Arabic numbers
    $fmt = new \NumberFormatter(
        $source_language, 
        \NumberFormatter::PATTERN_DECIMAL
    );

    // Create an array of English numbers to use for replacement
    $english_numbers = range(0, 9);

    // Convert the English numbers to Arabic numbers using the formatter
    $arabic_numbers = array_map(function ($n) use ($fmt) {
        // Trim to remove direction overriding chars [PDF (U+202C)]
        return trim($fmt->format($n));

    }, $english_numbers);

    // Replace the numbers and return the result
    return str_replace($arabic_numbers, $english_numbers, $value);
}
$sting= '٩٨٥٤٠٣٧٦٣٢١'; 

// search stings
$seachstrings = array("١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩", "٠"); 

// replace strings 
$replacestrings= array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0"); 

// replace function 
$result= str_replace($seachstrings , $replacestrings, $sting); 

print_r($result); 

어떤 종류의 대체를 사용하는 것이 아마도 더 나은 답일 것입니다. 하지만 직접 코딩하는 경우, 이것은 당신이 가지고 있는 것보다 더 나을 것입니다.

$len = strlen($arabic);
for ( $i = 0; $i < $len; ++$i )
{
    switch( $arabic[$i] )
    {
    case '&#1776':
        $english .= '0';
        break;
    case '&#1777':
        $english .= '1';
        break;
    case '&#1778':
        $english .= '2';
        break;
    // and so on
    case '&#1785':
        $english .= '9';
        break;
    default:
        $english .= $arabic[$i];
    }
}

그 정도면 됐다.

이런 거 어때요?

$number = arbic_to_english("&#1777;&#1779;");

echo $number; // 13

function arbic_to_english($number) {
    $english_number = 0;
    $matches = array();
    preg_match_all('/&#\d{4};/', $number, $matches);
    if(!count($matches) || !count($matches[0])) {
        throw new Exception('Invalid number');
    }
    $power = count($matches[0]) - 1;
    foreach($matches[0] as $arbic_digit) {
        $english_digit = preg_replace('/&#\d{2}(\d{2});/', '$1', $arbic_digit) - 76;
        $english_number += $english_digit * pow(10, $power--);
    }
    return $english_number;
}

입력 문자열을 분할할 필요가 없습니다.

private function convert($input)
{
    $unicode = array('۰', '۱', '۲', '۳', '٤', '٥', '٦', '۷', '۸', '۹');
    $english = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');

    $string = str_replace($unicode, $english , $input);

    return $string;
}

convert("۱۲۳٤٥");   //output : 12345

convert("۱۲34٥");   //output : 12345

convert("12345");   //output : 12345

가장 좋은 방법은 번호를 사용하는 것입니다.포맷터:

$formatter = \NumberFormatter::create('en', \NumberFormatter::DECIMAL);
echo $formatter->parse('۱۳۹۹'); // outputs: 1399

여기에 소스 언어의 문자열과 0과 목적 언어의 0을 취하는 함수가 있습니다.

아래 예제에서는 주어진 문자열에 대한 숫자를 힌디어에서 라틴어로 변환하고 있습니다.

val = LangNum2Num("जिनसे आप कुछ ९० सीख सकते ३४ हैं हम लाये हैं ७ आपके लिये कुछ", "०", 0)
console.log(val)
// Prints जिनसे आप कुछ 90 सीख सकते 34 हैं हम लाये हैं 7 आपके लिये कुछ




// Coverts numbers insides a string to other language number
// str is the string
// zeroFrom is the zero number from the language you want to convert
// zeroTo is the zero number of the languague you want to convert to

function LangNum2Num(str, zeroFrom, zeroTo) {
  // Get the UTF-16 code points of zeros
  codezeroFrom = ("" + zeroFrom).codePointAt(0)
  codezeroTo = ("" + zeroTo).codePointAt(0)

  // Make array containing codepoints from 0 to 10 for the language
  var FromArr = [...Array(10).keys()].map(e => codezeroFrom + e)
  var ToArr = [...Array(10).keys()].map(e => codezeroTo + e)

  // Split the string into array, if we catch a number, we will return number from destination language
  return str.split('').map(e => FromArr.includes(e.codePointAt(0)) ? String.fromCodePoint(ToArr[FromArr.indexOf(e.codePointAt(0))]) : e).join('')

}

이 기능을 사용했습니다.

function toEngNumbers($string)
{
    $arabic = ['٩', '٨', '٧', '٦', '٥', '٤', '٣', '٢', '١', '٠'];
    $persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
    $english = ['9', '8', '7', '6', '5', '4', '3', '2', '1', '0'];

    $convertedPersianNums = str_replace($persian, $english, $string);
    $converted = str_replace($arabic, $english, $convertedPersianNums);
    return $converted;
}

@Root 답변 기준:

function to_english_number( $string ) {

    $persianDecimal = [ '&#1776;', '&#1777;', '&#1778;', '&#1779;', '&#1780;', '&#1781;', '&#1782;', '&#1783;', '&#1784;', '&#1785;' ];
    $arabicDecimal  = [ '&#1632;', '&#1633;', '&#1634;', '&#1635;', '&#1636;', '&#1637;', '&#1638;', '&#1639;', '&#1640;', '&#1641;' ];

    $persian = [ '۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹' ];
    $arabic  = [ '٩', '٨', '٧', '٦', '٥', '٤', '٣', '٢', '١', '٠' ];

    $num = range( 0, 9 );

    $string = str_replace( $persianDecimal, $num, $string );
    $string = str_replace( $arabicDecimal, $num, $string );

    $string = str_replace( $persian, $num, $string );
    $string = str_replace( $arabic, $num, $string );

    return $string;
}

언급URL : https://stackoverflow.com/questions/11766726/convert-persian-arabic-numbers-to-english-numbers

반응형