ich so eine Zeichenfolge konvertieren:Wie ein gemischtes PHP String in die Zahl nur
$string = 'e.g. 25.32';
Ich möchte nur die Nummer (25,32)
Der Text könnte möglicherweise die Anzahl Umgebung ziehen sei irgendeine Nicht-Nummer.
ich so eine Zeichenfolge konvertieren:Wie ein gemischtes PHP String in die Zahl nur
$string = 'e.g. 25.32';
Ich möchte nur die Nummer (25,32)
Der Text könnte möglicherweise die Anzahl Umgebung ziehen sei irgendeine Nicht-Nummer.
könnten Sie reguläre Ausdrücke verwenden, wenn Sie das Format der Zeichenfolge kennen mit preg_match
Sie so etwas wie verwenden:
<?php
$str = "e.g. 25";
$val = (int)$str;
?>
Aber es ist nicht die beste Lösung.
A "stärker" und universal Alternative ist ...
Code: (AKTUALISIERT)
<?php
$str = "e.g. 25.32";
preg_match("/([0-9]+[\.,]?)+/",$str,$matches);
$val = $matches[0];
echo $val;
?>
Ausgang:
25.32
Als Funktion: (AKTUALISIERT)
<?php
function getInt($str)
{
preg_match("/([0-9]+[\.,]?)+/",$str,$matches);
return $matches[0];
}
?>
Verbrauch:
<?php
$val = getInt("e.g. 25.32");
?>
, die nicht floats, nur ganze Zahlen zurückgibt. –
@ dev-null-dweller Nur aktualisiert es. Es funktioniert jetzt ;-) –
Meine alte Funktion, die auch mit negativen Zahlen funktioniert:
function getNumber($str){
return floatval(preg_replace('/^[^\d-]+/','',$str));
}
Wenn die Nummer ist einfach:
([0-9]+(?:\.[0-9]+)?)
Sie dann diese der Zeichenfolge am Ende wollen entsprechen:
$string = 'e.g. 25.32';
$number = preg_replace('~^.*?([0-9]+(?:\.[0-9]+)?)$~', '$1', $string);
wird $number
enthalten "25.32"
, wandeln es, wenn Sie den Float-Wert müssen schwimmen Dies machen:
$float = (float) $number;
Dieser Code funktioniert nur, wenn es tatsächlich eine Nummer gibt. Wenn Sie sich nicht sicher sein kann, ist es, zu testen zuerst:
$string = 'e.g. 25.32';
$number = NULL;
$hasNumber = preg_match('~([0-9]+(?:\.[0-9]+)?)$~', $string, $matches);
if ($hasNumber)
{
list(, $number) = $matches;
}
Wenn die Zahl eine Zahl wie in PHP sein kann:
([+-]?INF|[+-]?(([0-9]+|([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*))|([0-9]+|(([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*)))[eE][+-]?[0-9]+))
Also darauf achten, was Sie tatsächlich passen müssen.
Was ist, wenn Ihre Zeichenfolge mehr als eine Zahl enthält? zum Beispiel 10.5 und 12.7'? – poncha
Ich bin mir ziemlich sicher, dass das schon einmal gefragt wurde.Bitte benutzen Sie die Suche und die dazugehörige Spalte auf der rechten Seite. – hakre