Я здивований, що тут не згадується filter_var, тому що це таке старе питання ...
PHP має вбудований метод робити це за допомогою санітарних фільтрів . Зокрема, той, хто використовується в цій ситуації, - FILTER_SANITIZE_NUMBER_FLOAT
це FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND
прапори. Так:
$numeric_filtered = filter_var("AR3,373.31", FILTER_SANITIZE_NUMBER_FLOAT,
FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND);
echo $numeric_filtered; // Will print "3,373.31"
Можливо, варто також зазначити, що оскільки він вбудований у PHP, це трохи швидше, ніж використання регулярного вираження з поточними бібліотеками PHP (хоча і буквально в наносекундах).