php字符串在(-)字符上爆炸

时间:2018-08-04 01:04:09

标签: php

我有一个类似这样的字符串:

$string = "small (150 - 160)"

有没有一种方法可以将150存储在变量$min中,将160存储在变量$max中?

4 个答案:

答案 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);