2014-07-25 19 views
6

Próbuję zastąpić wszystkie kropki przecinkami i przecinkami dla kropek i zastanawiałem się, co jest najlepszą praktyką. Jeśli zrobię to sekwencyjnie, kroki zostaną nadpisane.Zastępowanie przecinkiem kropką i kropką przecinkami

Na przykład: 1,234.56 (po wymianie przecinki) -> 1.234.56 (po wymianie kropki) -> 1,234,56

co oczywiście nie jest to, co chcę.

Jedna opcja, jak sądzę, polega na dzieleniu postaci i łączeniu się z nimi za pomocą przeciwnej litery. Czy istnieje łatwiejszy/lepszy sposób na zrobienie tego?

+0

proszę daj przykład do pracy. – erosman

+0

Co masz na myśli? Przykład po prostu zmieniłby 1.234.56 na 1.234,56? –

+0

Rozumiem ... Nie byłem pewien, jak chciałeś, żeby to się skończyło ... w każdym razie wydaje się, że już masz odpowiedź :) – erosman

Odpowiedz

13

Można użyć zwrotnego

"1,234.56".replace(/[.,]/g, function(x) { 
    return x == ',' ? '.' : ','; 
}); 

FIDDLE

Jeśli masz zamiar wymienić więcej niż dwa znaki, można utworzyć funkcję wygodę przy użyciu mapy, aby wykonać zamienniki

function swap(str, swaps) { 
    var reg = new RegExp('['+Object.keys(swaps).join('')+']','g'); 
    return str.replace(reg, function(x) { return swaps[x] }); 
} 

var map = { 
    '.':',', 
    ',':'.' 
} 

var result = swap("1,234.56", map); // 1.234,56 

FIDDLE

+1

Przyjemny oddzwonień. +1 –

+1

całkowicie niesamowite! – Zevan

+2

+1. Ale zamiast: '/ (\. |,)/G', użyłbym po prostu:' /[. ,]/ g' w celu wyeliminowania niepotrzebnej alternacji i przechwytywania grupy. – ridgerunner

3

Zrób to w Etapy wykorzystujące tekst zastępczy:

var foo = '1,234.56'; 
foo = foo 
    .replace(',', '~comma~') 
    .replace('.', '~dot~') 
    .replace('~comma~', '.') 
    .replace('~dot~', ',') 
+0

@ Odpowiedź adeneo jest w rzeczywistości lepsza. –

11

Można wykonać następujące czynności:

var str = '1,234.56'; 
var map = {',':'.','.':','}; 
str = str.replace(/[,.]/g, function(k) { 
    return map[k]; 
}); 

Working Demo

+1

Nice! Już miałem zaproponować wywołanie zwrotne zgodne z odpowiedzią @adeneo, ale użycie obiektu do dopasowania zamienników jest łatwiejsze do zbudowania. – Adam

+1

To jest naprawdę miłe: D – Zevan

+0

Jeśli naprawdę chcesz ułatwić budowanie, możesz utworzyć funkcję, która będzie akceptować ciąg i mapę i dynamicznie generować wyrażenie regularne, tak jak to -> ** http: // jsfiddle. net/7rf6C/1/**. Jeśli mimo wszystko musisz zaimplementować hardcode na regex, mapa naprawdę nie ma sensu. – adeneo

2

Można użyć pętli for. Coś jak:

var txt = document.getElementById("txt"); 
var newStr = ""; 
for (var i = 0; i < txt.innerHTML.length; i++){ 
    var char = txt.innerHTML.charAt(i); 
    if (char == "."){ 
     char = ","; 
    }else if (char == ","){ 
     char = "."; 
    } 
    newStr += char; 
} 
txt.innerHTML = newStr; 

Oto skrzypce: http://jsfiddle.net/AyLQt/1/

Muszę powiedzieć jednak, odpowiedź @ adenoeo jest sposób bardziej śliski: D

0

W JavaScript można użyć

var value = '1.000.000,55'; 
var splitValue = value.split('.'); 
for (var i = 0; i < splitValue.length; i++) { 
    var valPart = splitValue[i]; 
    var newValPart = valPart.replace(',', '.'); 
    splitValue[i] = newValPart; 
} 
var newValue = splitValue.join(','); 
console.log(newValue); 
Powiązane problemy