راکت

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

7 پاسخ

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

 function normalize_number($string)
{

    $persian = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
    $arabic = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
    $num = range(0, 9);
    $convertedPersianNums = str_replace($persian, $num, $string);
    $englishNumbersOnly = str_replace($arabic, $num, $convertedPersianNums);

    return $englishNumbersOnly;

}

و در formRequest این کد رو

public function prepareForValidation()
    {

        $this->merge([
            'mobile_no' => normalize_number($this->mobile_no)
        ]);

    }
    public function rules()
    {
        return [
            'name' => ['required', 'string', 'max:255'],
            'mobile_no' => ['required', 'regex:/[0-9]{11}/', 'digits:11', 'unique:users'],
            'password' => ['required', 'string', 'min:8'],
        ];

    }

در RegisterController هم این کد رو

 protected function validator(array $data)
    {
        return Validator::make($data, app(RegisterRequest::class)->rules());
    }

ولی باز هم فرمت نامعتبر میزنه

z.mehran
z.mehran
@zohremehran70
ثبت پرسش جدید

پاسخ‌ها

7
علیرضا کفایتی
علیرضا کفایتی
@alirezakefayati

تخصص: برنامه نویس laravel, vue.js

سلام
یک پیشنهاد ، موقع وارد کردن با جاوااسکریپت تنظیم کنید که اگر مثلا ۱ وارد شد تبدیلش کنه به 1
من خودم تجربه ای تو این سوالتون نداشتم اگر پیشنهاد خیلی بی ربطی است پوزش می طلبم

رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

سلام.
تو مسیر زیر، Helpers.php رو ساختین؟

\app\Http

شاید پاسخ شما همین‌جا باشد

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

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

اول از کارکرد تابع normalizenumber تون خاطر جمع بشید که آیا خروجیش همون چیزی هست که انتظار دارید یا نه... مثلا خروجیش رو همون اول die and dump کنید و ببینید. یا از tinker استفاده کنید و مقادیر مختلف بهش بدید و خروجیش رو چک کنید.

ضمنا چیزی که همینجوری مشخصه آرایه‌هایی که برای اعداد فارسی و عربی و انگلیسی نوشتید هم باگ دارند:

    $persian = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
    $arabic = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
    $num = range(0, 9);

اولا ترتیب مورد اول برعکس دو مورد بعدی هست! و ثانیا مقادیر فارسی در اصل عربی هستند و مقادیر عربی هم که به اشتباه کلا انگلیسی خوردند!

یک نکته حاشیه ‌ای هم اینکه شاید خیلی مهم نباشه اما سعی کنیم از نام گذاری های صحیح و استاندارد برای متغیرها و توابعمون استفاده کنیم. تجربه نشون داده در غیر اینصورت وقتی پروژه بزرگ میشه اشک در بیار خواهندشد. در مثال شما هم من باب پیشنهاد بهتر بود اسم تابع مثلا به to_en_num تبدیل بشه تا دقیقا مشخص باشه چه کاری انجام میده. یا برای سه تا متغیر آرایه اعداد مثلا از نام‌های farsi_nums و arabic_nums و english_nums استفاده بشه.

علیرضا کفایتی
علیرضا کفایتی
@alirezakefayati

تخصص: برنامه نویس laravel, vue.js

z.mehran
z.mehran
@zohremehran70

تخصص: برنامه نویس -طراح وب سایت

سلام دوستان ، ممنون از راهنمایی هاتون ولی من هنوز مشکلم حل نشده . با لپ تاپ که کد ها رو تست میکنم اوکیه و مشکلی نداره یعنی فارسی وارد میکنم تبدیل میکنه و ثبت نام میکنه ولی با گوشی همچنان همین مشکل روداره

فاطمه کاظمی زاده
فاطمه کاظمی زاده
@kazemi

تخصص: Senior front-end در هولدینگ دکتر کرمانی - مدرس مجتمع فنی

سلام. ببین من این تابعو توی ری اکت نوشتم. منطقش به دردت میخوره احتمالا

export function convertPersianDigits(str) {
    return str.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (d) {
        return d.charCodeAt(0) - 1632; // Convert Arabic numbers
    }).replace(/[0123456789]/g, function (d) {
        return d.charCodeAt(0) - 1776; // Convert Persian numbers
    });
}
z.mehran
z.mehran
@zohremehran70

تخصص: برنامه نویس -طراح وب سایت

@kazemi ممنون . تابعی که نوشتم هم درسته و توی لپ تاپ درست اجرا میشه و مشکلی نداره نمیدونم چرا توی موبایل هیچ تغییری نمیکنه ، کش موبایل رو هم پاک کردم :(

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام