Регулярные выражения проверка на число

thedude

Новичок
Здравствуйте! Помогите пожалуйста решить задачу выбора из строки только цифр и одной первой точки.
К примеру есть строка "фыв5.asdf4.6". В результате должно выдать "5.46". Я начинающий и не могу толком разобраться, написал $tzal = preg_replace("/[^0-9](\.)/", '', $tzal); В итоге заносятся все цифры и все точки.
 

hell0w0rd

Продвинутый новичок
/(\d+)\.(\d+)/ находит вроде последнее вхождение... что-то тут надо думать)
А зачем это вообще нужно?
 

AnrDaemon

Продвинутый новичок
Это абстрактная задача? Или какое-то практическое применение? Если абстрактная, то как условие звучит дословно?
 

vasinsky

Новичок
может не стоит замарачиваться паттерном

PHP:
$str = '.sd5.asdf4.6';
$temp_str = preg_split("##",$str);
$res = array();

foreach($temp_str as $l){
   if(is_numeric($l)){
      $res[] = $l;
   }
   elseif(($l == '.' && !in_array('.', $res)) && isset($res[0])){
      $res[] = $l;
   }

}

$clean_str = implode("", $res);

echo $clean_str;
 

С.

Продвинутый новичок
Может не стоит заморачиваться даже preg_splitом?
PHP:
$str = '.sd5.asdf4.6';
echo $str[3];  // '5'
 

vasinsky

Новичок
может. но по моему - в моём коде видно - что идёт разбор строки в массив.
 

hell0w0rd

Продвинутый новичок
Тогда уж
PHP:
$str = '.sd5.asdf4.6';
function getNumber($str) {
    $str = preg_replace('~[^0-9.]~', '', trim($str, '.'));
    return (false === $pos = strpos($str, '.')) ? $str : substr($str, 0, ++$pos) . str_replace('.', '', substr($str, $pos));
}

var_dump(getNumber($str));
Все равно интересно, как регуляркой решить:(
 
Сверху