2015-07-28 4 views
4

У меня есть номер, скажем, 2500.00, и я хочу преобразовать число в 2.500,00. Таким образом, мы можем заменить специальный символ, используя замену, какКак заменить несколько специальных символов на число?

var x = 2,500.00; 
x.replace(/,/g,"."); 

и для «Dot» также мы можем это сделать. Но в этом случае это не сработает, потому что, когда мы применяем функцию замещения для запятой, как указано выше, число станет 2.500.00, и если мы применим сейчас, оно станет равным 2500,00.

Так можно ли конвертировать 2,500.00 в 2.500,00?

+2

Заменить на что-то еще первый, вроде '' *. Например, ',' -> '*', затем '.' ->', 'и, наконец,' * '->' .'. – evolutionxbox

+0

Спасибо за вашу помощь evolutionbox, но это своего рода обходное решение, я так думаю. Есть ли какой-либо прямой метод для этого? – Thinker

+0

Нет прямой функции, совместимой с кросс-браузером (не IE11 +). – evolutionxbox

ответ

2

Вы можете использовать:

var x = '2,123,500.00'; 
var arr = x.split('.'); 
var y = arr[0].replace(/,/g, '.') + ',' + arr[1]; 
//=> 2.123.500,00 
+0

Это решение работает в конкретном случае, где есть точка и нет запятых после точки. В противном случае это решение не работает. – ChisholmKyle

+0

На самом деле есть только одна точка ввода в соответствии с OP. – anubhava

0

Почему бы не использовать встроенные методы, чтобы правильно форматировать номера?

Number.toLocaleString() будет работать просто отлично.

Если у вас на самом деле есть номер, как вы сказали, вы можете легко достичь этого, используя правильный язык. Если у вас есть строковое представление вашего номера, вам сначала придется его разобрать.

+2

Единственное, что нужно отметить, это совместимость с браузером. Это решение только для IE11 +. Он даже не работает в Safari. – evolutionxbox

3

String.prototype.replace может взять функцию:

'2,123,500.00'.replace(/[,.]/g, function(c){ return c===',' ? '.' : ','; }); 
+0

@ Karl-AndréGagnon Oh. Где? – 1983

+0

На самом деле, я ошибся (и узнал что-то новое). Я, хотя '.' Будет соответствовать всем символам ... –

+0

@ Karl-AndréGagnon Он соответствует каждому персонажу, но не тогда, когда он находится внутри класса персонажа. Класс символа соответствует символу _literally_. См. Здесь: http://www.regular-expressions.info/charclass.html#special – Pluto

1

Вы находитесь в удаче, .replace() принимает функцию в качестве второго аргумента. Эта функция имеет согласованную строку в качестве аргумента, а возвращаемое значение будет replace_by значение .replace().

Короче говоря, вы можете просто проверить, что соответствует строка и возвращает правильное значение:

var str = "2,500.00"; 
 

 
var changed_str = str.replace(/,|\./g, function(old){ 
 
    if (old === '.') 
 
     return ','; 
 
    else if (old === ',') 
 
     return '.'; 
 
}); 
 

 

 
document.write(changed_str)

-1

Это (сейчас) работает для любого количества запятых или точек, даже если конечные или ведущие точки или запятые.

HTML:

<div id="result"></div> 

JS:

var x = '.,2.123,50.0.00.'; 

var between_dots = x.split('.'); 
for (var i = 0; i < between_dots.length; i++) { 
    between_dots[i] = between_dots[i].replace(/,/g, '.'); 
} 
var y = between_dots.join(','); 

document.getElementById('result').innerHTML = y; 

Here's the JSFiddle