Ich möchte die Ziffern aus einer Zeichenfolge extrahieren, die Zahlen und Buchstaben enthält:
"In My Cart : 11 items"
Ich möchte die Nummer extrahieren 11
.
Ich möchte die Ziffern aus einer Zeichenfolge extrahieren, die Zahlen und Buchstaben enthält:
"In My Cart : 11 items"
Ich möchte die Nummer extrahieren 11
.
Da es nur 1 numerischen Wert in Ihrer Zeichenfolge zu isolieren ist, würde ich befürworten und persönlich verwenden filter_var()
con FILTER_SANITIZE_NUMBER_INT
.
echo filter_var($string, FILTER_SANITIZE_NUMBER_INT);
Eine verrücktere Technik, die funktioniert, weil es nur einen numerischen Wert gibt UND die einzigen Zeichen, die vor der Ganzzahl stehen, Buchstaben, Doppelpunkte oder Leerzeichen sind, ist die Verwendung von ltrim()
mit einer Zeichenmaske und wandeln die verbleibende Zeichenkette in eine Ganzzahl um.
$string = "In My Cart : 11 items";
echo (int)ltrim($string, 'A..z: ');
// 11
Wenn es aus irgendeinem Grund mehr als einen Integer-Wert gäbe und Sie den ersten abgreifen wollten, dann wäre Regex eine direkte Technik.
echo preg_match('/\d+/', $string, $m) ? $m[0] : '';
sscanf()
ist recht praktisch, wenn Sie die numerische Zeichenkette explizit als Ganzzahl (oder Fließkommazahl) umwandeln müssen. Wenn es möglich/unbekannt ist, dass der Integer-Wert am Anfang der Zeichenkette steht, dann stellen Sie der Eingabezeichenkette ein nicht-numerisches Zeichen voran, bevor Sie sie scannen. Die folgende Technik passt auf führende Nicht-Ziffern (und ignoriert sie mit *
nach dem %
), stimmt dann mit der ersten vorkommenden Ziffernfolge überein und wandelt die zurückgegebene Teilfolge in eine Ganzzahl um.
var_dump(sscanf(' ' . $string, '%*[^0-9]%d')[0]);
Um diese Technik anzupassen, um einen Float-Wert zu extrahieren, ändern Sie einfach die d
a f
. Für weitere Informationen über die (derzeit nicht dokumentierte) Funktion zur Unterdrückung von Zuweisungen in sscanf()
siehe diese Stelle .
preg_match_all('!\d+!', $some_string, $matches);
$string_of_numbers = implode(' ', $matches[0]);
Das erste Argument in implode besagt in diesem speziellen Fall: "Trenne jedes Element in matches[0] mit einem einzelnen Leerzeichen". Implode setzt kein Leerzeichen (oder was immer Ihr erstes Argument ist) vor die erste Zahl oder nach die letzte Zahl.
Zu beachten ist auch, dass in $matches[0] das Array der gefundenen Übereinstimmungen (die mit diesem regulären Ausdruck übereinstimmen) gespeichert wird.
Für weitere Informationen über die Bedeutung der anderen Indizes im Array siehe: http://php.net/manual/en/function.preg-match-all.php
Versuchen Sie dies, verwenden Sie preg_replace
$string = "Hello! 123 test this? 456. done? 100%";
$int = intval(preg_replace('/[^0-9]+/', '', $string), 10);
echo $int;
Können wir int daraus extrahieren wie
$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
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.