Строка анализа, содержащая диапазон значений до минимальных и максимальных переменных

Я ищу хороший способ разобрать строку на две переменные, используя PHP. Переменные называются minage и maxage, и их следует анализировать в соответствии с приведенными ниже примерами:

"40" -> minage=40, maxage=40 "-40" -> minage=null, maxage=40 "40-" -> minage=40, maxage=null "40-60" -> minage=40, maxage=60 

Solutions Collecting From Web of "Строка анализа, содержащая диапазон значений до минимальных и максимальных переменных"

Попробуй это:

 $minrange = null; $maxrange = null; $parts = explode('-', $str); switch (count($parts)) { case 1: $minrange = $maxrange = intval($parts[0]); break; case 2: $minrange = $parts[0] == "" ? null : intval($parts[0]); $maxrange = $parts[1] == "" ? null : intval($parts[1]); break; } 

Вы также можете инкапсулировать данные в классе, например Range:

 class Range { protected $min; protected $max; public function __construct($str) { if(preg_match('/^\d+$/', $str)) { $this->min = (int)$str; $this->max = (int)$str; } else { preg_match('/^(\d*)-(\d*)$/', $str, $matches); $this->min = $matches[1] ? (int)$matches[1] : null; $this->max = $matches[2] ? (int)$matches[2] : null; } } // more functions here like contains($value) and/or min() and max() public function __toString() { return 'min=' . $this->min . ', max=' . $this->max; } } $tests = array('40', '-40', '40-', '40-60'); foreach($tests as $t) { echo new Range($t) . "\n"; } 

который производит:

 min=40, max=40 min=, max=40 min=40, max= min=40, max=60 

Конечно, вы можете заменить вызовы preg_ на некоторые «нормальные» строковые функции, но единственное, что я знаю о PHP, – это какое-то регулярное выражение.

 $parts = explode("-", $str); $minage = NULL; $maxage = NULL; if (count($parts) == 1) { $minage = intval($parts[0]); $maxage = $minage; } else if ((count($parts) >= 2) && is_numeric($parts[0]) && is_numeric($parts[1])) { $minage = intval($parts[0]); $maxage = intval($parts[1]); }