2012-04-14 5 views
2

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.

+0

Was ist, wenn Ihre Zeichenfolge mehr als eine Zahl enthält? zum Beispiel 10.5 und 12.7'? – poncha

+1

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

Antwort

1

könnten Sie reguläre Ausdrücke verwenden, wenn Sie das Format der Zeichenfolge kennen mit preg_match

3

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"); 
?> 
+1

, die nicht floats, nur ganze Zahlen zurückgibt. –

+0

@ dev-null-dweller Nur aktualisiert es. Es funktioniert jetzt ;-) –

1

Meine alte Funktion, die auch mit negativen Zahlen funktioniert:

function getNumber($str){ 
    return floatval(preg_replace('/^[^\d-]+/','',$str)); 
} 
2

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.

Verwandte Themen