اعتبارسنجی بر اساس تعداد کاراکتر در لاراول

من با استفاده از validation برای مواردی اعتبار سنجی قرار دادم. یکی از این محدودیت ها تعداد کاراکتر هست که با استفاده از دستور min:1000  گفتم که حداقل باید 1000 کاراکتر باشه ولی برای زبان فارسی مشکل داره و درست حساب نمیکنه این رو هم بگم که من ادیتور هم دارم  TinyMCE 

برچسب ها:
پرسیده شده در: 4 سال قبل
آمار بازدید: 1342
saze20 (105)
0

وقتی شما از ادیتورهای wysiwyg در لاراول استفاده می کنید، به هنگام ذخیره سازی تمام تگ‌های HTML این ادیتور نیز ذخیره می شوند. بنابراین وقتی شما توضیحات را ارسال می کنید باید قبل از اعتبارسنجی با استفاده از دستور strip_tags تمام تگ‌های HTML را حذف کرده و سپس Validation را انجام دهید:

$description = strip_tags($request->description);
...

پس ابتدا باید اعتبارسنجی min را حذف کرده و به صورت اختصاصی این کار را انجام دهید. قبل از تمام مراحل اعتبارسنجی کدهای زیر را بنویسید.

// در این مرحله ابتدا تمام توضیحات را دریافت کرده و تگ ها را حذف می کنیم
$description = strip_tags($request->description);


// سپس بررسی می کنیم که آیا طول موردنظر در توضیحات هست یا خیر؟

if(strlen($description) < 100){
                throw ValidationException::withMessages(['description' => 'توضیحات شما کمتر از حد مجاز است.']);
            }

در کدهای بالا اگر توضیحات کاربر کمتر از ۱۰۰ کاراکتر بود خطای اعتبار سنجی به صفحه بازگردانده می شود. این خطا دقیقا مشابه همان خطای validation لاراول است.

ارسال شده در: 4 سال قبل
masoudsalehi (1725)
بیش از ۲ سال عضویت در روکسو بیش از ۲ سال عضویت در روکسو دارای 1000 کارما دارای 1000 کارما نظرات دریافتی:‌ بیش از 50 نظرات دریافتی:‌ بیش از 50 دارای 25 پاسخ صحیح دارای 25 پاسخ صحیح ارسال کننده پاسخ با 25 رای ارسال کننده پاسخ با 25 رای
1
ممنونم از راهنماییتون ولی من نمیخوام تگ های html رو حذف کنم چون نمایشش بد میشه 'description' =>'required|min:1000' چطور باید بنویسم که هنگام اعتبار سنجی تگ های html رو حساب نکنه. - saze20 در 4 سال قبل
توضیحات تکمیلی به همراه کدها به پاسخ اضافه شد. - masoudsalehi در 4 سال قبل
0

ممنون از راهنمایی این کد درست اجرا میشه تا وقتی که از enter  برای فاصله گزاری بین خطوط استفاده نشه برای رفع این مشکل باید چیکار کنم؟

الان من این رو وارد کردم:

  علی

محمد

که با فاصله ها 8 کاراکتر هست 

ولی دستور dd(strlen($description))  تعداد ۱۶ کاراکتر را نمایش می دهد. و برای عبارت زیر:

ali

ali

ali 

این حروف انگلیسی رو هم 13 نشون میده

ارسال شده در: 4 سال قبل
saze20 (105)
0

برای اینکه فاصله ها را نادیده بگیرید باید ابتدا با استفاده از تابع  preg_replace در PHP یک عبارت باقاعده نوشته و تمام فواصل را حذف کنید. نمونه کد زیر این کار را انجام می دهد:

$str='سلام اینجا آکادمی روکسو هست';
$str = preg_replace('/[^أ-يA-Za-z !@#$%^&*()]/ui', '', $str);
echo $str;//سلاماینجاآکادمیروکسوهست
echo strlen($str);//23
ارسال شده در: 4 سال قبل
masoudsalehi (1725)
بیش از ۲ سال عضویت در روکسو بیش از ۲ سال عضویت در روکسو دارای 1000 کارما دارای 1000 کارما نظرات دریافتی:‌ بیش از 50 نظرات دریافتی:‌ بیش از 50 دارای 25 پاسخ صحیح دارای 25 پاسخ صحیح ارسال کننده پاسخ با 25 رای ارسال کننده پاسخ با 25 رای
جهت ارسال پاسخ ابتدا عضو سایت شوید.