2012-04-14 26 views
2

我有一個這樣的字符串:如何混合PHP字符串轉換成數只有

$string = 'e.g. 25.32'; 

我想拔出只數(25.32)

周圍數可能文本是任何非數字。

+0

如果您的字符串包含多個數字,該怎麼辦?例如'例如10.5和12.7'? – poncha 2012-04-14 18:42:18

+1

我很確定這已經被問過。請使用右側的搜索和相關列。 – hakre 2012-04-14 18:49:57

回答

1

你可以使用正則表達式,如果你知道你的字符串與preg_match

3

格式,您可以使用類似:

<?php 
    $str = "e.g. 25"; 
    $val = (int)$str; 
?> 

但它不是最好的解決辦法


A 「更強」 和普遍替代方案是...

代碼:(修訂版)

<?php 
    $str = "e.g. 25.32"; 

    preg_match("/([0-9]+[\.,]?)+/",$str,$matches); 

    $val = $matches[0]; 

    echo $val; 
?> 

輸出:

25.32 

作爲一個功能:(修訂版)

<?php 
     function getInt($str) 
     { 
      preg_match("/([0-9]+[\.,]?)+/",$str,$matches); 
      return $matches[0]; 
     } 
?> 

用法:

<?php 
     $val = getInt("e.g. 25.32"); 
?> 
+1

不返回浮點數,只有整數。 – 2012-04-14 19:00:13

+0

@ dev-null-dweller剛更新了它。它正在工作;-) – 2012-04-14 19:04:01

1

我的老功能,也可用於負數:

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

如果號碼很簡單:

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

然後你要在字符串的結尾匹配這樣的:

$string = 'e.g. 25.32'; 
$number = preg_replace('~^.*?([0-9]+(?:\.[0-9]+)?)$~', '$1', $string); 

這將使$number包含"25.32",轉換它,如果你需要的浮點值浮動:

$float = (float) $number; 

如果實際上有一個數字,則此代碼僅適用。如果你不能確定它是測試第一:

$string = 'e.g. 25.32'; 
$number = NULL; 
$hasNumber = preg_match('~([0-9]+(?:\.[0-9]+)?)$~', $string, $matches); 
if ($hasNumber) 
{ 
    list(, $number) = $matches; 
} 

如果該號碼可以是數字,如PHP:

([+-]?INF|[+-]?(([0-9]+|([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*))|([0-9]+|(([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*)))[eE][+-]?[0-9]+)) 

那麼照顧你的實際需要相匹配。