Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pozostawienie w stringu tylko rządanych znaków
Forum PHP.pl > Forum > Przedszkole
sadistic_son
Słuchajcie, mam jakiś string, przykładowo $str='abcdefg1234%^&*';
Oraz tablicę ze znakami dozwolonymi $arr= array('a','b','u','w','y',1,3,8,9,'!','*');

Zapodajcie propozycje jak obrobić $str tak aby pozostały w nim tylko znaki dozwolone, zawarte w $arr. Czyli aby po obróbce $str wyglądało tak: ab13*.
Wyrażenia regularne odpadają.
Crozin
Cytat
Wyrażenia regularne odpadają.
A to niby czemu?
sadistic_son
Bo nie bardzo je czaję a nie mam obecnie czasu ani tym bardziej chęci się ich uczyć.
Crozin
Wyrażenia regularne załatwiają cały problem jedną linią kodu, ale skoro nie to nie... Twój problem.
Baw się z rozwalaniem tekstu na pojedyncze znaki (explode), sprawdzaniem każdego (foreach) znaku czy jest w podanej tablicy (in_array) i jeżeli nie usuwaniem go (unset).
bastard13
  1. $zmienna='';
  2. foreach($arr as $v)
  3. $zmienna.=$v;
  4.  
  5. $zmienna='/[^'.$zmienna.']/';
  6. echo preg_replace($zmienna,'',$str);

Tylko musisz zamienić '*' na '\*'

W sumie to rzeczywiście powinna być jedna linijka:)
  1. echo preg_replace('/[^'.implode($arr).']/','',$str);
Quantum
  1. $str ='abcdefg1234%^&*';
  2. $arr = array('a','b','u','w','y',1,3,8,9,'!','*');
  3.  
  4. $output = implode('', array_intersect(str_split($str), $arr));
  5. echo $output;


można też tak, ale też uważam że to głupota zastępować regexp takimi wynalazkami smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.