2011-01-29 18 views
11

assumendo questi testi 'x34', '150px', '650dpi', 'e3r4t5' ... come posso ottenere solo numeri? Voglio dire che voglio 34, 150, 650, 345 senza altri caratteri. Voglio dire ottenere i numeri che questa stringa ha in una variabile.Filtra i numeri in una stringa in php

risposta

13

Ci scusiamo per unirsi al carrozzone in ritardo, piuttosto che utilizzare Regex, vorrei suggerire di usare PHP di funzioni integrate, che può essere più veloce di Regex .

filter_var

flags for the filters

esempio per ottenere solo i numeri dalla stringa data

<?php 
$a = '[email protected]+dk9.0$3e8`~]\]2'; 
$number = str_replace(['+', '-'], '', filter_var($a, FILTER_SANITIZE_NUMBER_INT)); 
// Output is 390382 
?> 

Per aderire agli standard più rigorosi per la domanda, ho aggiornato la mia risposta per dare un risultato migliore.

Ho aggiunto str_replace, come FILTER_SANITIZE_NUMBER_FLOAT o INT bandiera non metterà a nudo + e - caratteri dalla stringa, perché fanno parte della deroga di PHP.

Anche se ha reso il filtro un po 'lungo, ma ora ha meno possibilità di fallire o di dare risultati inaspettati, e questo sarà più veloce di REGEX.

Edit:

1: reso conto che con FILTER_SANITIZE_NUMBER_FLOAT, PHP non eliminerà questi personaggi opzionalmente.,eE, quindi per ottenere i numeri appena puri gentilmente utilizzano FILTER_SANITIZE_NUMBER_INT

2: Se si dispone di una versione PHP inferiore a 5.4, utilizzare gentilmente lo array('+', '-') anziché la sintassi di array breve..

11

È possibile utilizzare un'espressione regolare per rimuovere qualsiasi carattere che non sia una cifra:

preg_replace('/\D/', '', $str) 

Qui il modello \D descrive qualsiasi carattere che non è una cifra (complemento a \d).

19
$str = "e3r4t5"; 
$str_numbers_only = preg_replace("/[^\d]/", "", $str); 

// $number = (int) $str; 
+1

Esattamente. http://ideone.com/WKtth –

+0

perché non utilizzare le funzioni di filtro PHP da ora in poi, che è raccomandato. La risposta è la seguente sotto – Haijerome

2

Sostituire tutto ciò che non è un numero e utilizzare tale valore.

$str = "foo1bar2baz3"; 
$num = intval(preg_replace("/[^0-9]/", "", $str)); 
+0

Suppongo che la risposta di cui sopra sia più efficiente, considerando l'utilizzo su milioni di entità. –

6

Utilizzare le funzioni PHP FILTER se si utilizza PHP 5.2.X, 5.3.x, 5.4. Il suo altamente raccomandato

$mixed_input = "e3r4t5"; 
$only_numbers = filter_var($mixed_input, FILTER_SANITIZE_NUMBER_INT); 

prega di passare attraverso con this link sapere di più

+1

Sono d'accordo che è raccomandato. Tuttavia non potrebbe funzionare come previsto se il mixed_input contiene i segni "+" o "-", poiché questi non vengono filtrati, anche nel mezzo della stringa. – Julien

1

È possibile utilizzare seguente funzione

extract_numbers funzione ($ string) {

preg_match_all ('/ ([\ d] +) /', $ string, $ match);

return $ match;

}

+0

Funziona per me :) – Jasmeen

Problemi correlati