Newsgroup: it.comp.www.php
Titolo: stringa con soli numeri con preg_replace() | dove sbaglio?

Salve a tutti.
 
Ho le necessità di ottenere da una $stringa solo caratteri numerici decimali [0-9].
 
Ho provato con diverse soluzioni, tutte con la funzione preg_replace, ma non ho ottenuto nessun risultato:
 
$str = preg_replace('|[^0-9]|', '', $str);
 
oppure
 
$str = preg_replace("/[^0-9]/", "", $str);
 
oppure
 
$str = preg_replace("[^0-9]", "", $str);
 
 
Nessuna di questa mi restituisce solo numeri da una stringa contenente, oltre i numeri, anche caratteri alfabetici e caratteri speciali.
 
 
Perchè ???
 
 
 
 
 

 decimali [0-9].
 
$str = preg_replace("/[^\d]/", "", $str);
 
 
 


Purtroppo, ...non funziona!!! Continuo a ritrovarmi la stringa con lettere e caratteri speciali.
 
Ma come è possibile ???

 Ma come è possibile ?
 
È possibile perché evidentemente così hai ordinato di fare al programma.
 
Se mostri un esempio del problema è possibile darti una risposta più precisa.
L'esempio deve essere il più piccolo possibile e riprodurre il problema 
sulla tua macchina, cioè se esegui:
  php esempio.php
devi osservare il comportamento sbagliato.
Insieme all'esempio devi anche mostrare l'output che ottieni effettivamente.
 
 
Detto questo e tralasciando il motivo per cui hai un risultato non 
aspettato e che non conosciamo, preg_replace funziona per fare quello 
che hai descritto, l'esempio più semplice funzionante è:
  <?php
      print(preg_replace("/\D/", "", "Foo 123 . 45 , 67 + 8 ==BAR 90"));
che stampa "1234567890" in uscita.
 
-- 
Andrea
 


Eccomi, ...e buongiorno a tutti.
 
In riferimento a tutti i suggerimenti, consigli, etc, ...ed in particolare alla paziente risposta di Andrea, che ringrazio soprattutto per la pazienza, torno sull'argomento poichè, nonostante la fretta mi ha suggerito di provare subito con l'ultima indicazione ricevuta, ossia l'utilizzo della seguente istruzione:
 
preg_replace("/\D/", "", "$str")); 
 
continuo a non risolvere il problema!
 
A questo punto, così come giustamente evidenziato da Andrea, proverò a fornire qualche indicazione in più, così da mettervi nelle condizioni di comprendere meglio dove potrebbe nascondersi il problema.
 
Il contesto sul quale sto rimanendo bloccato è composto da un form che con un metodo post invia ad una pagina php una serie di informazioni (dati anagrafici, numeri telefonici, indirizzi, etc etc); e proprio sui numeri di telefono ho deciso di effettuare un controllo per rimuovere eventuali caratteri non numerici (quindi di far fuori eventuali caratteri alfabetici e soprattutto caratteri come -, /, etc etc). Quindi ho creato una banalissima funzione
 
function OnlyNum($str)
{
$str = preg_replace("/\D/", "", $str); 
return $str;
}
 
alla quale passare le stringhe da controllare, come ad esempio:
 
$Telefono = trim(OnlyNum($_POST['Telefono']));
 
e nonostante tutte le prove effettuate con i suggerimenti ricevuti, quando nel campo del form scrivo questa stringa "6565644K47'9" nel momento in cui verifico il contenuto della variabile $Telefono constato che il valore non cambia!
Ho sempre la medesima stringa "6565644K47'9".
 
Nella funzione ho anche provato con:
 
$str = print_r(preg_replace("/\D/", "", $str), true);
 
ma nulla!!!
 
Mi rimetto, ancora una volta, alla Vs. pazienza ed alla Vs. competenza per uscire da questo fastidioso ostacolo, con la speranza di poter andare avanti con il mio lavoro.
 
Grazie e buona giornata a tutti.
 
 
Maurizio
 


 
me@bibook ~> cat foo.php
<?php
 
function OnlyNum($str)
{
    $str = preg_replace("/\D/", "", $str);return $str;
}
 
$Telefono = trim(OnlyNum("6565644K47'9"));
print($Telefono);
me@bibook ~> php foo.php
6565644479
⏎                                                             
 
 
                    me@bibook ~>
 
 
-- 
Andrea