페르시아/아랍 숫자를 영어 숫자로 변환
간단한 기능으로 페르시아어/아랍어 숫자를 영어 숫자로 변환하려면 어떻게 해야 합니까?
페르시아어/아랍어 숫자:
۰ // -> 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 '۰':
$english .= '0';
break;
case '۱':
$english .= '1';
break;
case '۲':
$english .= '2';
break;
// and so on
case '۹':
$english .= '9';
break;
default:
$english .= $arabic[$i];
}
}
그 정도면 됐다.
이런 거 어때요?
$number = arbic_to_english("۱۳");
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 = [ '۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹' ];
$arabicDecimal = [ '٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩' ];
$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
'programing' 카테고리의 다른 글
키/값 JavaScript 개체의 키를 가져오는 방법 (0) | 2023.07.25 |
---|---|
패키지에 파이썬 모듈의 이름을 나열하는 표준 방법이 있습니까? (0) | 2023.07.25 |
페이지 요청 생성자가 더 이상 사용되지 않습니다. (0) | 2023.07.25 |
MapStruct - 구현을 찾을 수 없습니다. (0) | 2023.07.25 |
폼을 사용하지 않고 POST 변수 설정 (0) | 2023.07.25 |