من با استفاده از validation برای مواردی اعتبار سنجی قرار دادم. یکی از این محدودیت ها تعداد کاراکتر هست که با استفاده از دستور min:1000
گفتم که حداقل باید 1000 کاراکتر باشه ولی برای زبان فارسی مشکل داره و درست حساب نمیکنه این رو هم بگم که من ادیتور هم دارم TinyMCE
وقتی شما از ادیتورهای 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 لاراول است.
ممنون از راهنمایی این کد درست اجرا میشه تا وقتی که از enter برای فاصله گزاری بین خطوط استفاده نشه برای رفع این مشکل باید چیکار کنم؟
الان من این رو وارد کردم:
علی
محمد
که با فاصله ها 8 کاراکتر هست
ولی دستور dd(strlen($description))
تعداد ۱۶ کاراکتر را نمایش می دهد. و برای عبارت زیر:
ali
ali
ali
این حروف انگلیسی رو هم 13 نشون میده
برای اینکه فاصله ها را نادیده بگیرید باید ابتدا با استفاده از تابع preg_replace در PHP یک عبارت باقاعده نوشته و تمام فواصل را حذف کنید. نمونه کد زیر این کار را انجام می دهد:
$str='سلام اینجا آکادمی روکسو هست';
$str = preg_replace('/[^أ-يA-Za-z !@#$%^&*()]/ui', '', $str);
echo $str;//سلاماینجاآکادمیروکسوهست
echo strlen($str);//23
به جمع هزاران کاربر اینستاگرامی روکسو بپیوندید.