یک پدر برنامهنویس و عاشق خانواده (تماس: @skmohammadi)
تبدیل اعداد فارسی و عربی به انگلیسی در PHP بدون str_replace
یکی از نکاتی که هر برنامهنویس PHP میبایست در طراحی فرمهای فارسی در نظر بگیرد، این است که کیبورد کاربر در بسیاری از مواقع ممکن است فارسی یا عربی باشد و به همین خاطر کوئری کردن مقادیر عددی فارسی یا عربی در دیتابیس نتیجهبخش نخواهد بود.
در همین راستا، تبدیل ارقام فارسی/عربی به انگلیسی برای عناصری مثل کدملی، شماره شناسنامه و ... پیش از کوئری دیتابیس، الزامی است.
یکی از متداولترین روشهای تبدیل ارقام فارسی/عربی به انگلیسی که در بسیاری از سایتها و منابع فارسی و لاتین پیشنهاد شده، استفاده از تابع str_replace یا strtr هست که من ترجیحاً یک نمونه از روش strtr رو در زیر آوردم:
function toEnNumber($input) {
$replace_pairs = array(
'۰' => '0', '۱' => '1', '۲' => '2', '۳' => '3', '۴' => '4', '۵' => '5', '۶' => '6', '۷' => '7', '۸' => '8', '۹' => '9',
'٠' => '0', '١' => '1', '٢' => '2', '٣' => '3', '٤' => '4', '٥' => '5', '٦' => '6', '٧' => '7', '٨' => '8', '٩' => '9'
);
return strtr( $input, $replace_pairs );
}
اما علاوه بر روش بالا که نیازمند تعیین کاراکترهای عددی هست، میخوام یه روش استاندارد و اصولیتر رو بهتون آموزش بدم.
کلاس NumberFormatter در PHP
کلاس NumberFormatter یکی از کلاسهای کمکی در مجموعه PHP Intl هست و به کمک اون میشه فرمتهای مختلف عددی رو بهم تبدیل کرد و از این کلاس میخوام برای تبدیل اعداد فارسی/عربی به انگلیسی استفاده کنم.
تابع toEnNumber که بالاتر نوشته بودم رو اینطور بازتعریف میکنم:
function toEnNumber($input) {
$fa_fmt = numfmt_create( 'fa', NumberFormatter::DECIMAL );
$ar_fmt = numfmt_create( 'ar', NumberFormatter::DECIMAL );
$output = numfmt_parse( $fa_fmt, $input );
$output = numfmt_parse( $ar_fmt, $input );
return $output;
}
در تعریف تابع toEnNumber، از تابع سازنده numfmt_create برای ایجاد کلاس NumberFormatter استفاده کردیم. این تابع دارای دو آرگومان هست. یکی Local و دیگری استایل Style یا Pattern که مقادیر ثابتی براش در نظر گرفته شده. سپس از فرمتر (Formatter)های ایجاد شده جهت parse کردن مقادیر ورودی استفاده میکنیم.
امیدوارم مفید واقع بشه :)
مطلبی دیگر از این انتشارات
10 ویژگی Eloquent لاراول که ممکن هست از آنها استفاده نکرده باشید
مطلبی دیگر از این انتشارات
حلقه های for، while، do while، switch و حلقه های تو در تو در جاوا
مطلبی دیگر از این انتشارات
مسیر های مثبت در یادگیری برنامه نویسی