تبدیل اعداد فارسی و عربی به انگلیسی در PHP بدون str_replace

تبدیل اعداد فارسی و عربی به انگلیسی در PHP بدون str_replace
تبدیل اعداد فارسی و عربی به انگلیسی در PHP بدون str_replace

یکی از نکاتی که هر برنامه‌نویس PHP می‌بایست در طراحی فرم‌های فارسی در نظر بگیرد، این است که کیبورد کاربر در بسیاری از مواقع ممکن است فارسی یا عربی باشد و به همین خاطر کوئری کردن مقادیر عددی فارسی یا عربی در دیتابیس نتیجه‌بخش نخواهد بود.

در همین راستا، تبدیل ارقام فارسی/عربی به انگلیسی برای عناصری مثل کدملی، شماره شناسنامه و … پیش از کوئری دیتابیس، الزامی است.

یکی از متداول‌ترین روش‌های تبدیل ارقام فارسی/عربی به انگلیسی که در بسیاری از سایت‌ها و منابع فارسی و لاتین پیشنهاد شده، استفاده از تابع str_replace یا strtr هست که من ترجیحاً یک نمونه از روش strtr رو در زیر آوردم:

12345678function 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 );
}

اما علاوه بر روش بالا که نیازمند تعیین کاراکترهای عددی هست، میخوام یه روش استاندارد و اصولی‌تر رو بهتون آموزش بدم.

https://virgool.io/@skmohammadi/%D8%A7%D9%81%D8%B2%D9%88%D9%86%D9%87-syntax-highlighter-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%88%DB%8C%D8%B1%DA%AF%D9%88%D9%84-xpu1h4keneax

افزونه Syntax Highlighter برای ویرگول
افزونه Syntax Highlighter برای ویرگول
افزونه Syntax Highlighter ویرگول، یک کروم‌افزونه ساده برای تبدیل کدبلاک معمولی ویرگول به یک کدبلاک استاندارد با قابلیت تشخیص خودکار زبان اس…

برای شما

کلاس NumberFormatter در PHP

کلاس NumberFormatter یکی از کلاس‌های کمکی در مجموعه PHP Intl هست و به کمک اون میشه فرمت‌های مختلف عددی رو بهم تبدیل کرد و از این کلاس میخوام برای تبدیل اعداد فارسی/عربی به انگلیسی استفاده کنم.

تابع toEnNumber که بالاتر نوشته بودم رو اینطور بازتعریف می‌کنم:

123456789function 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 کردن مقادیر ورودی استفاده می‌کنیم.

امیدوارم مفید واقع بشه 🙂

نویسنده مطلب: سیدکریم محمدی

منبع مطلب

به فکر سرمایه‌گذاری هستی؟

با هر سطحی از دانش در سریع‌ترین زمان با آموزش گام به گام، سرمایه گذاری را تجربه کن. همین الان میتونی با لینک زیر ثبت نام کنی و ۱۰ درصد تخفیف در کارمزد معاملاتی داشته باشی

ثبت نام و دریافت جایزه
ممکن است شما بپسندید
نظرات
  1. سهیل بهادری اقبال می گوید

    خیلی ممنونم استاد خیلی بهتر از بقیه مقاله ها جواب گرفتم مرسی

نظر شما درباره این مطلب

آدرس ایمیل شما منتشر نخواهد شد.