سلام دوستان فرم ثبت نامی که من در نظر گرفتم برای پروژه ام شماره همراه و پسورد داره که وقتی با گوشی وارد میشم و اعداد فارسی میزنم نمیشناسه برای تبدیل اعداد فارسی به انگلیسی توی هلپر این کد رو قرار دادم
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());
}
ولی باز هم فرمت نامعتبر میزنه
سلام
یک پیشنهاد ، موقع وارد کردن با جاوااسکریپت تنظیم کنید که اگر مثلا ۱ وارد شد تبدیلش کنه به 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 استفاده بشه.
سلام دوستان ، ممنون از راهنمایی هاتون ولی من هنوز مشکلم حل نشده . با لپ تاپ که کد ها رو تست میکنم اوکیه و مشکلی نداره یعنی فارسی وارد میکنم تبدیل میکنه و ثبت نام میکنه ولی با گوشی همچنان همین مشکل روداره
سلام. ببین من این تابعو توی ری اکت نوشتم. منطقش به دردت میخوره احتمالا
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
});
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟