2009-02-27 10 views
33

Mam pole tekstowe w JavaScript. Kiedy wpisuję '0000.00' w polu tekstowym, chcę wiedzieć, jak przekonwertować to tylko do jednego wiodącego zera, takiego jak '0.00'.Skróć początkowe zera ciągu znaków w JavaScript

+0

Trzeba wyjaśnić, co to jest „łańcuch” jest. Jeśli twój "ciąg" jest liczbą dziesiętną, wtedy odpowiedź będzie inna, niż jeśli "ciąg" jest ciągiem tekstowym. "00000.000" -> "0,000" będzie konwersją dziesiętną. "000TXT10001" -> "0TXT10001" wymagałoby funkcji przycinania. Na przykład, czego oczekujesz, gdy dane wejściowe to "0011.1100" -> "011.1100" lub "11.11"? – ChronoFish

Odpowiedz

1

Spróbuj tego:

<input type="text" onblur="this.value=this.value.replace(/^0+(?=\d\.)/, '')"> 
13
var value= document.getElementById("theTextBoxInQuestion").value; 
var number= parseFloat(value).toFixed(2); 
+4

Czy powoduje to problemy, jeśli liczba zer po lewej stronie separatora dziesiętnego jest bardzo duża? – Eric

+0

Eric ma rację, zadziała tylko, jeśli masz jedno wiodące zero. Jeszcze więcej i nie. –

8

Brzmi jak chcesz tylko usunąć zera, chyba że istnieje tylko jedna („0” do liczby całkowitej lub „0.xxx” dla pływaka, gdzie x może być dowolne).

ten powinien być dobry do pierwszego cięcia:

while (s.charAt(0) == '0') {   # Assume we remove all leading zeros 
    if (s.length == 1) { break };  # But not final one. 
    if (s.charAt(1) == '.') { break }; # Nor one followed by '.' 
    s = s.substr(1, s.length-1) 
} 
+0

To jest dobre rozwiązanie. Opieranie się na wbudowanych funkcjach nie zawsze jest najlepszą opcją. Zamieniam to w funkcję pomocniczą, która pobiera argument łańcuchowy i zwraca sformatowany ciąg znaków. –

+0

Działa bardzo dobrze dla mnie. Chciałbym tylko dodać fragment kodu do obsługi liczb ujemnych (z "-" w pierwszym znaku). – Gaston

43

bardziej uproszczone rozwiązanie jest jak poniżej. Sprawdź to!

var resultString = document.getElementById("theTextBoxInQuestion") 
          .value 
          .replace(/^[0]+/g,""); 
+9

Idealny? Er ... to nie działa: '' 0000.00'' staje się ''.00'' – MikeM

+0

@MikeM, wtedy możesz użyć' replace (/^[0] +/g, "0") ' – Andrew

5

Można użyć tego kodu:

<script language="JavaScript" type="text/javascript"> 
<!-- 
function trimNumber(s) { 
    while (s.substr(0,1) == '0' && s.length>1) { s = s.substr(1,9999); } 
    return s; 
} 

var s1 = '00123'; 
var s2 = '000assa'; 
var s3 = 'assa34300'; 
var s4 = 'ssa'; 
var s5 = '121212000'; 

alert(s1 + '=' + trimNumber(s1)); 
alert(s2 + '=' + trimNumber(s2)); 
alert(s3 + '=' + trimNumber(s3)); 
alert(s4 + '=' + trimNumber(s4)); 
alert(s5 + '=' + trimNumber(s5)); 
// end hiding contents --> 
</script> 
22
str.replace(/^0+(?!\.|$)/, '') 

    '0000.00' --> '0.00' 
    '0.00' --> '0.00' 
    '00123.0' --> '123.0' 
     '0' --> '0' 
4

Ok proste rozwiązanie. Jedyny problem polega na tym, że napis "0000.00" daje zero. Ale myślę, że jest to fajne rozwiązanie.

var i = "0000.12"; 
var integer = i*1; //here's is the trick... 
console.log(i); //0000.12 
console.log(integer);//0.12 

Dla niektórych przypadkach myślę, że można to działa ...

Powiązane problemy