A ver si os gusta el lío ilegible que me he montado para hacer el script rápido, confuso, y de pocas líneas

:
Código PHP:
var nos=["4.532,234","55,56002","541.867,078"];
function formato_PC(n) {
return Number( n.replace(/./g,"").replace(/,/g,".") );
}
function formato_HUM(n) {
n=String(n).split("."); //el entero es n[0] y la parte decimal es n[1]
n[0]=n[0].split("").reverse().join(""); //le damos la vuelta, asi podemos tocarlo desde atras sin complicaciones
n[0]=n[0].replace(/(d{3})(?=d)/g,"$1.");
//ver comentario abajo
n[0]=n[0].split("").reverse().join(""); //lo reestablecemos a su orden original
return n.join(","); //unimos la parte entera con la decimal
}
function suma(arr) {
var total=0;
for(var i=0;i<arr.length;i++)
total+=formato_PC(arr[i]);
return formato_HUM(total);
}
document.write( suma(nos) );
El comentario es:
coincide con 3 digitos seguidos solo si estan seguidos de otro digito y lo sustituímos por los tres digitos con un punto (evitamos el punto al final de la cadena. Ejemplo: Si el numero original es 123456, al darle la vuelta sera 654321: buscamos ocurrencias de 3 numeros solo si estan seguidas de otro numero, es decir, encontramos 654 porque le sigue un 3, y no encontramos 321 porque no hay ningun numero detras, evitando como resultado "654.321." que al hacer el reverse seria ".123.456" y no "123.456"
Lo que se traduciría en nuestra página si alguien quiere por:
Código PHP:
var nos=["4.532,234","55,56002","541.867,078"];
function suma(arr) {
for(var i=0, total=0; i<arr.length; i++)
total+=Number( arr[i].replace(/./g,"").replace(/,/g,".") );
total=String(total).split(".");
total[0]=total[0].split("").reverse().join("").replace(/(d{3})(?=d)/g,"$1.").split("").reverse().join("");
return total.join(",");
}
document.write( suma(nos) );
5 líneas dentro de nuestra función.
AVISO: Todas las letras d dentro de las expresiones regulares tienen una contrabarra delante suyo, el sistema del foro impide que salgan. Son \d todas.
total[0]=total[0].split("").reverse().join("").replace(/(\d{3})(?=\d)/g,"$1.").split("").reverse().join("");
Editado: : Se me olvidó decir que hay una contrabarra delante del punto que el sistema del foro tampoco muestra, es:
total+=Number( arr[i].replace(/\./g,"").replace(/\,/g,".") );
Que nadie se mosquee, sólo me aburro un poco y quería ponerme como reto personal reducir un poco el script y acordarme de las expresiones regulares. Pero me ha quedado elegante, ¿no? La potencia de las expresiones regulares...
Un saludo a todos.