PHP函数将给定的字符串变量中的整数和字符串部分分开

时间:2013-04-23 07:58:38

标签: php string

我有一个字符串变量$nutritionalInfo,它可以有100gm,10mg,400cal,2.6Kcal,10percent等值......我想解析这个字符串并将值和单位部分分成两个变量{ {1}}和$value。有没有可用的PHP功能?或者我怎么能在PHP中这样做?

3 个答案:

答案 0 :(得分:5)

使用preg_match_all,就像这样

$str = "100gm";
preg_match_all('/^(\d+)(\w+)$/', $str, $matches);

var_dump($matches);

$int = $matches[1][0];
$letters = $matches[2][0];

对于浮动值,试试这个

$str = "100.2gm";
preg_match_all('/^(\d+|\d*\.\d+)(\w+)$/', $str, $matches);

var_dump($matches);

$int = $matches[1][0];
$letters = $matches[2][0];

答案 1 :(得分:3)

使用正则表达式。

$str = "12Kg";
preg_match_all('/^(\d+|\d*\.\d+)(\w+)$/', $str, $matches);
echo "Value is - ".$value = $matches[1][0];
echo "\nUnit is - ".$month = $matches[2][0];

Demo

答案 2 :(得分:2)

我遇到了类似的问题,但这里没有一个答案对我有用。其他答案的问题是他们都假设你总是有一个单位。但有时我会得到像" 100"而不是" 100kg"而其他解决方案将导致价值为" 10"和单位是" 0"。

这是我从answer获得的更好的解决方案。这会将数字与任何非数字字符分开。

$str = '70%';

$values = preg_split('/(?<=[0-9])(?=[^0-9]+)/i', $str);

echo 'Value: ' . $values[0]; // Value: 70
echo '<br/>';
echo 'Units: ' . $values[1]; // Units: %