2014-08-27 2 views
0

У меня есть простая функция, которая форматирует строку в качестве валюты - это добавление пробелов каждые 3 символов:Формат валюты со знаком минус, используя регулярное выражение

function addSpace(n) { 
    var rx = /(\d+)(\d{3})/; 
    return String(n).replace(/^\d+/, function (w) { 
     while (rx.test(w)) { 
      w = w.replace(rx, '$1 $2'); 
     } 
     return w; 
    }); 
} 

Так что, когда я использую его следующим образом:

addSpace("1234567.89") 

я получаю:

"1 234 567.89" 

, но я не могу получить такое же поведение для отрицательных чисел.

Я хотел бы получить -1 234 567.89 для addSpace("-1234567.89")

Как я должен изменить свою функцию, чтобы получить этот результат? Я попытался добавить -? в начале rx, но это не помогло.

Я знаю, что могу найти - в строке, и если он найден, добавьте его в начало, но я хочу этого избежать.

+0

hum '/ (- \ d + | \ d +) (\ d {3}) /' должен делать. – Tensibai

ответ

2

Просто измените регулярное выражение:

/^-?\d+/ 

Выход:

"-1 234 567.89" 

Demo

+0

работает отлично! Я добавил '-?' В неправильном месте – Misiu

1

Pass -, как дополнительный аргумент, использование /^-?\d+/ в Regex

return String(n).replace(/^-?\d+/, function (w) { 
    while (rx.test(w)) { 
     w = w.replace(rx, '$1 $2'); 
    } 
    return w; 
}); 

DEMO

+0

@hsz был первым :) спасибо! – Misiu

Смежные вопросы