PDA

View Full Version : سوال: فیلتر کردن کلیه حروف غیر فارسی و اعداد و نشانه ها



arminr2000
دوشنبه 30 شهریور 1394, 23:10 عصر
با سلام خدمت دوستان

می خوام متنی مثل "asd45شسی" رو فیلتر کنم و نتیجه فقط حروف فارسی باشه.

اینم نوشتم ولی جواب نگرفتم...



for($j = 0 ; $j <= 60 ; $j++) { $temp = $tmp[$j]; $string = str_replace($temp , '' ,$string);
}


و این توضیحم بدم که $tmp آرایه ای هست که شامل حروف بزرگ و کوچک انگلیسی و اعداده

H:Shojaei
سه شنبه 31 شهریور 1394, 08:51 صبح
$str="asd45شسی";
echo preg_replace('/[a-z A-Z 0-9]/', '', $str);

pejman_view
سه شنبه 31 شهریور 1394, 14:09 عصر
$str="asd45شسی";
echo preg_replace('/[a-z A-Z 0-9]/', '', $str);


یه جای کدتون می لنگه راه جالبی پیشنهاد دادید من بعضی اوقات تو انگلیسی کلمه کم میارم از این راه ها استفاده می کنم که جواب می ده اما همیشه جوابگو نیست مثالی بزنم مثلاً وقتی می خوام بگم ممنون غذا خورد سیر هستم ، چون کلمه سیر را نمی دانم می گم نه ممنون گرسنه نیستم. اما کسی که سیر دیگه جای خوردن نداره کسی که گرسنه نیست ممکن بتواند بخورد اما گرسنه نیست!
حالا حل کردن این موضوع قشنگ بود باز راه حل نیست چون صورت مسئله میگه کلیه حروف غیر فارسی ممکنه انگلیسی نباشه در عوض چینی باشه!

حال برای این موضوع من قبلاً چنین چیزی بر نخوردم واقعاً تجربه اش رو ندارم اما طبق رفرنس خود PHP باید یکی از این دو راه حل ذیل جواب بدهد.
برای فارسی old persian زده واقعاً نمی دانم منظورش چیه اگه کار نکرد از دومی که arabic استفاده کنید و نتیجه را اعلام کنید.

رفرنس PHP: http://php.net/manual/en/regexp.reference.unicode.php



preg_match("/\p{Old_Persian}/u", $string)
preg_match("/\p{Arabic}/u", $string)

arminr2000
سه شنبه 31 شهریور 1394, 22:02 عصر
ممنون بابت جوابتون

preg_match("/\p{Arabic}/u", $string)

این یکی جواب بهتری میده ولی باز هم کامل نیست چون یک سری حروف عربی رو هم داریم که خیلی تو زبان فارسی استفاده نمیشه.
فک کنم اگر بیایم یه ارایه هم برای حذف این سری حروف هم بزاریم کامل میشه کارمون

arminr2000
سه شنبه 31 شهریور 1394, 22:03 عصر
یه سوال دیگه که برام پیش اومد اینه که فرق بین این دو متد چیه دقیقا؟
str_replace
preg_match

plague
سه شنبه 31 شهریور 1394, 23:39 عصر
من برای url هام از این استفاده میکنم



$regex = '/[^\da-z A-Z 0-9_\- ا ئ آ ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک ك گ ل م ن و ه ی ي]/u';
$url = preg_replace($regex , ' ', $url );

H:Shojaei
چهارشنبه 01 مهر 1394, 20:13 عصر
یه سوال دیگه که برام پیش اومد اینه که فرق بین این دو متد چیه دقیقا؟
str_replace
preg_match
str_replace معنیش کارش رو میرسونه دیگه تو یه رشته میتونید بخشیش رو با رشته یا چیز دیگه جایگزین کنید...
پارامتر ها: str_replace(1,2,3);
'1:رشته ای که میخواید به جاش چیز دیگه بگذارید',
'۲: رشته ای که میخواید جایگزین بشه',
'۳: رشته اصلی'

preg_match هم فقط توی رشته جستجو میکنه و مقادیری که میخواید رو اگر باشه میتونید از رشته در بیارید...
پارامتر ها preg_match(1,2,3);
'۱:رشته یا پترنی که میخواید پیدا کنید ',
'۲: رشته ای که میخواید توش بگردین',
'3: آرایه ای از مقادیری که پیدا کرده');

kb0y667
چهارشنبه 01 مهر 1394, 23:11 عصر
همه موارد بیان شده بالا ضعف هایی دارن

اگه میخوای تنها فقط حروف فارسی باشد ، و لا غیر

راهش اینه :


$string=preg_replace('/[^\x{061B}-\x{063A}\x{0641}-\x{064A}]/u','',$string);

و من الله توفیق