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.
$str = 'In My Cart : 11 12 items';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);
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);
preg_replace('/[^0-9]/', '', $string);
Das sollte besser machen ..!
preg_replace
verwenden:
$str = '(111) 111-1111';
$str = preg_replace('/\D/', '', $str);
echo $str;
Ausgabe: 1111111111
Für Floating-Nummern
preg_match_all('!\d+\.*\d*!', $string ,$match);
Siehe meinen Kommentar für die aktualisierte Regex.
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)?
Verwenden von preg_replace
$str = 'In My Cart : 11 12 items';
$str = preg_replace('/\D/', '', $str);
echo $str;
Sie können preg_match verwenden:
$s = "In My Cart : 11 items";
preg_match("|\d+|", $s, $m);
var_dump($m);
Sie können folgende Funktion verwenden:
function extract_numbers($string)
{
preg_match_all('/([\d]+)/', $string, $match);
return $match[0];
}
versuchen Sie es mit - preg_replace
$string = "Hello! 123 test this? 456. done? 100%";
$int = intval(preg_replace('/[^0-9]+/', '', $string), 10);
echo $int;
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
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;
}
}
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);
$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
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
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");