z.mehran
3 سال پیش توسط z.mehran مطرح شد
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());
    }

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


ثبت پرسش جدید
علیرضا کفایتی
تخصص : برنامه نویس laravel, vue.js
@alirezakefayati 3 سال پیش مطرح شد
0

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


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 3 سال پیش مطرح شد
0

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

\app\Http

محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش آپدیت شد
1

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

اول از کارکرد تابع 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 استفاده بشه.


علیرضا کفایتی
تخصص : برنامه نویس laravel, vue.js
@alirezakefayati 3 سال پیش مطرح شد
z.mehran
تخصص : برنامه نویس -طراح وب سایت
@zohremehran70 3 سال پیش مطرح شد
0

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


فاطمه کاظمی زاده
تخصص : Senior front-end در هولدینگ دک...
@kazemi 3 سال پیش مطرح شد
0

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

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
تخصص : برنامه نویس -طراح وب سایت
@zohremehran70 3 سال پیش مطرح شد
0

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


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

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