2014-07-25 32 views
6

Noktalar için virgül ve virgülle ilgili tüm noktaları değiştirmeye çalışıyorum ve bunun için en iyi uygulamanın ne olduğunu merak ediyordum. Bunu sıralı olarak yaparsam, adımlar birbirinin üzerine yazacaktır. ÖrneğinVirgülleri nokta ve nokta ile virgülle değiştirme

: 1,234.56 (virgül değiştirdikten sonra) - (noktalar yerleştirildikten sonra)> 1.234.56 -> ne istiyorum açıkçası değildir 1,234,56

.

Sanırım bir seçenek karakterleri bölmek ve karşıt karakteri kullanarak daha sonra katılmaktır. Bunu yapmak için daha kolay/daha iyi bir yolu var mı? İkiden fazla karakterleri değiştirmek için gidiyoruz

+0

kullanabilirsiniz JavaScript yılında Lütfen İşte

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; 

keman var: Bir şey gibi Çalışmak için bir örnek ver. – erosman

+0

Ne demek istiyorsun? Bir örnek sadece 1.234.56 ila 1.234.56 arasında mı değişiyor? –

+0

Görüyorum ... Nasıl bitmesini istediğin konusunda emin değildim ... her neyse zaten cevabın var gibi görünüyor :) – erosman

cevap

13

Bir geri arama

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

FIDDLE

kullanabilirsiniz, sen değiştirmeler yapmak için bir harita kullanarak bir kolaylık işlevi oluşturabilir

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

Nice callback. +1 –

+1

tamamen harika! – Zevan

+2

+1. Ama yerine: '/ (\. |,)/G' yerine, sadece gereksiz dönüşüm ve yakalama grubunu ortadan kaldırmak için kullanıyorum: /[.,]/ g'. – ridgerunner

3

tutucu metni kullanarak aşamaları: Aşağıdaki yapabilirdi

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

@ adeneo'nun cevabı aslında daha iyi. –

11

:

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

Working Demo

+1

Güzel! @adeneo cevabı satırları boyunca bir geri arama önermek üzereydim, ancak değiştirmeleri eşleştirmek için bir nesne kullanmak çok daha kolay. – Adam

+1

Gerçekten çok hoş: D – Zevan

+0

Gerçekten de kolayca yapılandırılmasını istiyorsanız, bir dize ve bir haritayı kabul eden ve normal ifadeyi dinamik olarak yaratan bir işlev yaratabilirsiniz, bunun gibi -> http http // jsfiddle. net/7rf6C/1/**. Regex'i zaten kodlamak zorunda kalırsanız, bir harita gerçekten bir anlam ifade etmez. – adeneo

0

Eğer

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);