Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak filtrować numery telefonów?
Forum PHP.pl > Forum > Przedszkole
twardes
witam

mam zbiór nr. telefonów w postaci tablicy np.
Kod
228854891
228854892
228854893
228854894
228854895
każdy numer mam w postaci 9 cyfr po kolei

i mam string np.
Kod
Warszawa, Ochota, Rakowiec, 38m2,  2 pokoje , 329 000 zł tel. 508 155 453, 508-547-552 227545541, +48 22642-56-69  (Współpaca  z  agencją: NIE) (Źródło: INTERNET(2)
tutaj numery telefonów są nieregularne. Raz oddzielone przecinkiem i spacją, raz tylko przecinkiem. Potem jest problem bo numery czasami są podzielone spacjami czasami myślnikami a czasem w ogóle. Jedyna regularność polega na tym że są ciągiem 9 cyfr, albo zawierają prefix +48 (ewentualnie 10 ale wtedy pierwsza jest to 0).

moje pytanie to jak odfiltrować z takiego stringu numery telefonów z tablicy, tak aby oddzielić opis od numeru telefonu?
Cezar708
  1. <?php
  2. $string = "Warszawa, Ochota, Rakowiec, 38m2, 2 pokoje , 329 000 tel. 508 155 453, 508-547-552 227545541, +48 22642-56-69 (Wspca z agenNIE) (: INTERNET(2)";
  3.  
  4. $arrSearch = array("-", " ");
  5. $arrReplace = array("","");
  6.  
  7. $string = str_replace($arrSearch, $arrReplace, $string);
  8. $string = preg_replace("/[^0-9+]/", " ", $string);
  9. $string = preg_replace("/[[:space:]]+/", " ", $string);
  10.  
  11. $arrCandidats = explode(" ", $string);
  12. $numbers = array();
  13.  
  14. foreach( $arrCandidats as $candidat ){
  15. if ( !isset($candidat{8}) ) continue;
  16. if ( $candidat{0} == "0" && strlen($candidat) == 10 ){
  17. $numbers[] = $candidat;
  18. } elseif ( substr($candidat,0,3) == "+48" && strlen($candidat) == 12 ){
  19. $numbers[] = $candidat;
  20. } elseif ( strlen($candidat) == 9 ){
  21. $numbers[] = $candidat;
  22. }
  23. }
  24. print_r($numbers);
  25. ?>


NIe jest to może sposób najbardziej optymalny, ale działa. Jedyne, czego nie jest w stanie wyciągnąć to jeśli dwa numery są podane obok siebie a ich separatorem jest spacja lub myślnik. Przykład:
Kod
598-123-533 609 090 099
9 +48223344559


Generalnie możesz ten kod wzbogacić o sprawdzanie czy ciąg cyfr zawiera +48, lub czy podzielny jest przez 9... tego już mi się nie chciało dopsywać.

Pozdrawiam
twardes
Ok wielkie dzięki, najbardziej mi zależało na podmianie znaków i "wyciągnieciu" całego numeru,
A jak wyciągnąć sam opis? bez numerów telefonów?
Cezar708
to zmieniasz wyrażenie regularne, rozbijasz i składasz już bez numerów:

  1. <?php
  2. $string = "Warszawa, Ochota, Rakowiec, 38m2, 2 pokoje , 329 000 tel. 508 155 453, 508-547-552 227545541, +48 22642-56-69 +48 22642 56 69 (Wspca z agenNIE) 0 22642 56 69 (: INTERNET(2)";
  3. $arr = preg_split("/(+48|0).[0-9-[:space:]]{11}|(+48|0)[0-9]{9}|[1-9]([0-9-[:space:]]){10}|[1-9]([0-9]){8}/", $string );
  4. $opis = implode(" ", $arr);
  5. print_r($opis);
  6. ?>


sprawdziłem na kilka przykładów jakby co to dopracuj te wyrażenie
twardes
Jest ekstra biggrin.gif Wielkie bardzo dzięki! O to mi chodziło. Na około 200 rekordów z takimi stringami pominął tylko jeden numer "tel:(22)6736213" Ale to nie istotne i tak bardzo dobry wynik. Z resztą skryptu sobie już raczej poradzę.

Jeszcze raz bardzo dziękuję 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.