PDA

View Full Version : سوال: حذف کردن کلمات از رشته ها



ayoubsys
چهارشنبه 19 اسفند 1394, 05:23 صبح
سلام و عرض وقت بخیر


برخی اوقات نیاز هست که از اطلاعاتی که کاربر ثبت میکنه برخی کلمات رو حذف کنیم.(مثلا در بخش کامنت و حذف کلمات مس-تهج-ن)


که از str_replace کمک میگیریم و بعنوان مثال کلمه reza رو حذف میکنیم :


<?php
$input = "alireza";
$input = str_replace("reza", "", $input);
echo $input;
?>



خب الان اگر کاربر کلمه رضا رو بصورت Reza یا rEzA بنویسه از فیلتر رد میشه. پس از strtolower یا strtoupper کمک میگیریم که این مشکل نیز حل شود :



<?php
$input = "alireza";
$input = strtolower(($input);
$input = str_replace("reza", "", $input);
echo $input;
?>



اما باز هنوز یه راه گریز دیگه هست که کاربر اینبار مثلا رضا رو RErezaZA یا reREZAza بنویسه تنها reza وسط حذف شده و مجدد در خروجی یک reza به نمایش داده خواهد شد.


که جهت این کار هم میشه (کمترین کار) بجای جایگزین کلمه مورد نظر با "" از "-" استفاده کنیم ، که حداقل در خروجی چنین چیزی رو داشته باشیم :
re-za


$input = str_replace("reza", "-", $input);


البته ممکن است تعداد تکرار این کلمات مشخص نباشند :
REreREZAzaZA


خب سوالاتی که از دوستان دارم :
1- در بالا از strtolower کمک گرفتیم. که باعث میشه تمامی حروف انگلیسی ما کوچک چاپ بشوند. ایا راهی هست این مورد رو رفع کرد؟ (که مثلا بعد از حذف کلمات خاص ، بزرگ و کوچیکی حروف اطلاعات وارد شده به قبل برگردد.)


2- جهت حذف موارد مثل reREZAza ، از چه روشی استفاده کنیم که موثر واقع شود؟


تشکر .

Farshid007
چهارشنبه 19 اسفند 1394, 11:59 صبح
برای همجین کاری عبارات عمومی بهتر باشه فکر کنم
جستجو کنید عبارات عمومی در PHP یا همون regular expression in php
موفق باشید

plague
چهارشنبه 19 اسفند 1394, 13:29 عصر
برای مشکل 2 تو حلقه بزار یه چیزی شبیه به این


$a = '';
$b = 'REreREZAzaZA';
while($a != $b )
{
$a = $b ;
$b = str_replace('reza' , '' , $b );
}