Estou surpreso que não tenha havido menção a filter_var aqui por ser uma pergunta tão antiga ...
O PHP tem um método embutido de fazer isso usando filtros de higienização . Especificamente, aquele a ser usado nessa situação é FILTER_SANITIZE_NUMBER_FLOAT
com os FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND
sinalizadores. Igual a:
$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"
Também pode valer a pena notar que, como é embutido no PHP, é um pouco mais rápido do que usar o regex com as bibliotecas atuais do PHP (embora literalmente em nanossegundos).