我有一个小问题。我尝试将类似“1 234”的字符串转换为数字:1234 我无法到达那里。该字符串是从网站上删除的。有可能不是那里的空间吗?因为我已经尝试过像str_replace和preg_split这样的方法来获取空间而没有任何东西。另外(int)$ abc只取第一个数字(1)。 如果有人有想法,我会更加满意!谢谢!
答案 0 :(得分:10)
这就是我处理它的方式......
<?php
$string = "Here! is some text, and numbers 12 345, and symbols !£$%^&";
$new_string = preg_replace("/[^0-9]/", "", $string);
echo $new_string // Returns 12345
?>
答案 1 :(得分:8)
intval(preg_replace('/[^0-9]/', '', $input))
答案 2 :(得分:4)
抓取网站总是需要特定的代码,您知道如何接收输入 - 并且您编写了使其可用的代码。
这就是为什么第一个答案仍然是str_replace。
$iInt = (int)str_replace(array(" ", ".", ","), "", $iInt);
答案 3 :(得分:1)
$str = "1 234";
$int = intval(str_replace(' ', '', $str)); //1234
答案 4 :(得分:0)
我刚刚遇到了同样的问题,但是提供的答案并未涵盖我遇到的所有不同情况...
所以我做了这个功能(感谢 Dan,这个想法在我脑海中浮现):
function customCastStringToNumber($stringContainingNumbers, $decimalSeparator = ".", $thousandsSeparator = " "){
$numericValues = $matches = $result = array();
$regExp = null;
$decimalSeparator = preg_quote($decimalSeparator);
$regExp = "/[^0-9$decimalSeparator]/";
preg_match_all("/[0-9]([0-9$thousandsSeparator]*)[0-9]($decimalSeparator)?([0-9]*)/", $stringContainingNumbers, $matches);
if(!empty($matches))
$matches = $matches[0];
foreach($matches as $match):
$numericValues[] = (float)str_replace(",", ".", preg_replace($regExp, "", $match));
endforeach;
$result = $numericValues;
if(count($numericValues) === 1)
$result = $numericValues[0];
return $result;
}
所以,基本上,这个函数提取包含在字符串中的所有数字,无论有多少文本,识别小数点分隔符并将每个提取的数字作为浮点数返回。
您可以使用 $decimalSeparator 参数指定一个国家/地区使用的小数点分隔符。
答案 5 :(得分:0)
使用此代码删除任何其他字符,如 .,:"'\/
、!@#$%^&*()
、a-z
、A-Z
:
$string = "This string involves numbers like 12 3435 and 12.356 and other symbols like !@# then the output will be just an integer number!";
$output = intval(preg_replace('/[^0-9]/', '', $string));
var_dump($output);