Это должно делать то, что вы хотите.
$your_string_without_letters = preg_replace('\w+', '', $your_string)
preg_match('[0-9][0-9.]*', $your_string_without_letters, $matches);
$clean_string = $matches[0];
Совпадение начнется, как только будет найдено первое число, и остановится, когда оно достигнет чего-то, что не является ни числом, ни точкой (т.е.запятая или конец строки в ваших примерах)
РЕДАКТИРОВАТЬ: забыл сначала удалить буквы внутри значения.
(просто личное мнение, но если пользователь пишет символы, которые не являютсяцифры, точки, запятые или символы валюты я бы отказался от ввода вместо того, чтобы пытаться очистить его)