我有一个类似这样的字符串:
$string = "small (150 - 160)"
有没有一种方法可以将150存储在变量$min
中,将160存储在变量$max
中?
答案 0 :(得分:2)
function minMax($string) {
$digits = explode("-", $string);
return filter_var_array($digits, FILTER_SANITIZE_NUMBER_INT);
}
// $yourString = "small (150 - 160)"
$values = minMax( $yourString );
$min = $values[0]; $max = $values[1];
该函数使用explode
删除“-”并创建一个数组。在“-”左边的字符串放在$ digits [0]中,在右边的字符串放在$ digits [1]中。
PHP过滤器从数组字符串中删除非整数字符。注意我假设您正在使用整数。 filter_var_array
不能使用小数点,但是您可以使用filter_var
来代替FILTER_SANITIZE_NUMBER_FLOAT
标志来保留小数点。
function minMax($string) {
return filter_var($string, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION );
}
$values = minMax( "small (150 - 160.4)" );
$number = explode("-", $values);
$min = $number[0]; $max = $number[1];
在十进制示例中,紧接在任何“。”上方。将被保留。如果字符串可以包含非数字句号,则您需要从输出中删除引号“。”,例如如果字符串= “大...(150-160.4)” ,则$ min将包含'... 150'以防止前置$min = trim($min,'.');
。
答案 1 :(得分:0)
此PHP
脚本将解决您的问题:
$string = "small (150 - 160)";
$tmp = preg_replace("/[^0-9\.]/", " ", $string);
$tmp = trim(preg_replace('/\s+/u', ' ', $tmp));
$tmp = explode(' ', $tmp);
$min = $tmp[0];
$max = $tmp[1];
答案 2 :(得分:0)
<?php
$string = "small (150 - 160)";
$string = preg_replace('/[^\d-]/', '', $string); // replace everything not a digit and not a "-" with empty string ('')
list( $min, $max ) = explode('-', $string); // split by "-" and store in $min and $max
var_dump( $min);
var_dump( $max );
输出
string(3) "150"
string(3) "160"
答案 3 :(得分:-1)
preg_match_all('!\d+!', $string, $matches);
var_dump($matches);