Me sorprende no ha habido ninguna mención de filter_var aquí de esto es una vieja cuestión, tales ...
PHP tiene un método incorporado para hacer esto usando filtros de desinfección . Específicamente, el que se debe usar en esta situación es FILTER_SANITIZE_NUMBER_FLOAT
con las FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND
banderas. Al igual que:
$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"
También podría valer la pena tener en cuenta que debido a que está integrado en PHP, es un poco más rápido que usar expresiones regulares con las bibliotecas actuales de PHP (aunque literalmente en nanosegundos).