webentwicklung-frage-antwort-db.com.de

Zahlen aus einem String extrahieren

Ich möchte die Zahlen aus einem String extrahieren, der Zahlen und Buchstaben enthält:

"In My Cart : 11 items"

Ich möchte hier die Nummer 11 oder eine andere Nummer erhalten.

270
Bizboss
$str = 'In My Cart : 11 12 items';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);
301
Gaurav

Wenn Sie nur die Zahlen herausfiltern möchten, verwenden Sie filter_var :

$str = 'In My Cart : 11 items';
$int = (int) filter_var($str, FILTER_SANITIZE_NUMBER_INT);
457
preg_replace('/[^0-9]/', '', $string);

Das sollte besser machen ..!

242

preg_replace verwenden:

$str = '(111) 111-1111';
$str = preg_replace('/\D/', '', $str);
echo $str;

Ausgabe: 1111111111 

67
Akash Deep

Für Floating-Nummern

preg_match_all('!\d+\.*\d*!', $string ,$match);

Siehe meinen Kommentar für die aktualisierte Regex.

18
Yash

Ich besitze nicht den Kredit dafür, aber ich muss ihn nur teilen. Dieser reguläre Ausdruck erhält Zahlen aus einer Zeichenfolge, einschließlich Dezimalstellen und Kommas:

/((?:[0-9]+,)*[0-9]+(?:\.[0-9]+)?)/

Zitiert von hier:
php - regex - wie extrahiert man eine Zahl mit Dezimalstellen (Punkt und Komma) aus einer Zeichenkette (z. B. 1.120,01)?

8
mroncetwice

Verwenden von preg_replace

$str = 'In My Cart : 11 12 items';
$str = preg_replace('/\D/', '', $str);
echo $str;
7
Hariadi

Sie können preg_match verwenden:

$s = "In My Cart : 11 items";
preg_match("|\d+|", $s, $m);
var_dump($m);
6
Dmitri Gudkov

Sie können folgende Funktion verwenden: 

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

   return $match[0];
}
4
Jasmeen

versuchen Sie es mit - preg_replace

$string = "Hello! 123 test this? 456. done? 100%";
$int = intval(preg_replace('/[^0-9]+/', '', $string), 10);
echo $int;

DEMO

2
Dave
preg_match_all('!\d+!', $some_string, $matches);
$string_of_numbers = implode(' ', $matches[0]);

Das erste implodierte Argument in diesem speziellen Fall lautet "Trenne jedes Element in Übereinstimmungen [0] durch ein einzelnes Leerzeichen". Implode fügt kein Leerzeichen (oder was auch immer Ihr erstes Argument ist) vor der ersten oder nach der letzten Zahl ein.

Noch etwas zu beachten ist, dass $ Matches [0] das Array der gefundenen Übereinstimmungen (die diesem regulären Ausdruck entsprechen) gespeichert wird. 

Weitere Informationen zu den anderen Indizes im Array finden Sie unter: http://php.net/manual/de/function.preg-match-all.php

2
Bradley Kovacs

Eine der einfachen Methoden, die ich ohne Verwendung von Regex für Anfänger gefunden habe, war:

 $string= "21321&*^&*^das";


                    $splitted=str_split($string); 

                   foreach ($splitted as $char){
                       if($char%1!=$char){
                           echo " ".$char;
                       }

                    }
0
Dhruv Thakkar

Wenn Sie nicht wissen, welches Format die Nummer ist? Int oder Floating, dann verwenden Sie diese:

$string = '$125.22';

$string2 = '$125';

preg_match_all('/(\d+.?\d+)/',$string,$matches); // $matches[1] = 125.22

preg_match_all('/(\d+.?\d+)/',$string2,$matches); // $matches[1] = 125

Diese Funktionen behandeln auch die Floating-Nummern

$str = "Doughnuts, 4; doughnuts holes, 0.08; glue, 3.4";
$str = preg_replace('/[^0-9\.]/','-', $str);
$str = preg_replace('/(\-+)(\.\.+)/','-', $str);
$str = trim($str, '-');
$arr = explode('-', $str);
0
Khaldoon Masud
$value = '25%';

Oder

$value = '25.025$';

Oder

$value = 'I am numeric 25';
$onlyNumeric = filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);

Dies gibt nur den numerischen Wert zurück

0
Rakesh

wir können int daraus extrahieren 

$string = 'In My Car_Price : 50660.00';

echo intval(preg_replace('/[^0-9.]/','',$string));  # without number format   output: 50660
echo number_format(intval(preg_replace('/[^0-9.]/','',$string)));  # with number format  output :50,660

demo: http://sandbox.onlinephpfunctions.com/code/82d58b5983e85a0022a99882c7d0de90825aa398

0
user889030

Befolgen Sie diesen Schritt, um die Zeichenfolge in eine Zahl zu konvertieren

$value = '$0025.123';
$onlyNumeric = filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
settype($onlyNumeric,"float");

$result=($onlyNumeric+100);
echo $result;

Ein anderer Weg, es zu tun:

$res = preg_replace("/[^0-9.]/", "", "$15645623.095605659");
0
jewelhuq