Zaproponuj rozwiązanie usuwania lub obcinania wiodących zer z liczby (dowolnego ciągu) przez javascript, jquery.
javascript
jquery
numbers
zero
Somnath Muluk
źródło
źródło
'00000.5'
)?Odpowiedzi:
Możesz użyć wyrażenia regularnego dopasowującego zera na początku ciągu:
s = s.replace(/^0+/, '');
źródło
Użyłbym funkcji Number ():
var str = "00001"; str = Number(str).toString();
>> "1"
Albo pomnożyłbym swój ciąg przez 1
var str = "00000000002346301625363"; str = (str * 1).toString();
>> "2346301625363"
źródło
Może trochę późno, ale chcę dodać moje 2 centy.
jeśli twój ciąg ZAWSZE reprezentuje liczbę, z możliwymi zerami wiodącymi, możesz po prostu rzutować ciąg na liczbę za pomocą operatora „+”.
na przykład
x= "00005"; alert(typeof x); //"string" alert(x);// "00005" x = +x ; //or x= +"00005"; //do NOT confuse with x+=x, which will only concatenate the value alert(typeof x); //number , voila! alert(x); // 5 (as number)
jeśli twój ciąg nie reprezentuje liczby i musisz usunąć tylko 0, użyj innych rozwiązań, ale jeśli potrzebujesz ich tylko jako liczby, jest to najkrótsza droga.
i do Twojej wiadomości, możesz zrobić odwrotnie, wymusić na liczbach działanie jako łańcuchy, jeśli połączysz z nimi pusty ciąg, na przykład:
x = 5; alert(typeof x); //number x = x+""; alert(typeof x); //string
mam nadzieję, że to komuś pomoże
źródło
Ponieważ powiedziałeś „dowolny ciąg”, zakładam, że jest to również ciąg, którym chcesz się posługiwać.
"00012 34 0000432 0035"
Tak więc regex to najlepszy sposób:
var trimmed = s.replace(/\b0+/g, "");
Zapobiegnie to utracie wartości „000000”.
var trimmed = s.replace(/\b(0(?!\b))+/g, "")
Możesz zobaczyć działający przykład tutaj
źródło
Mam to rozwiązanie do obcinania wiodących zer (liczby lub dowolnego ciągu) w javascript:
<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>
źródło
false
. Użycie9999
jako drugiego parametru dosubstr
nie jest potrzebne. Po prostu użyjwhile (s.substr(0,1) == '0') s = s.substr(1);
. Poza tym ten fragment kodu wygląda na naprawdę stary,language
atrybutscript
tagu jest przestarzały, a używanie komentarzy wscript
tagach jest potrzebne tylko w przeglądarkach, które w ogóle nie rozumiejąscript
tagu, np. Internet Explorer 1.0.parseInt(value) or parseFloat(value)
To będzie dobrze działać.
źródło
Spróbuj tego,
function ltrim(str, chars) { chars = chars || "\\s"; return str.replace(new RegExp("^[" + chars + "]+", "g"), ""); } var str =ltrim("01545878","0");
Więcej tutaj
źródło
Po prostu spróbuj pomnożyć przez jeden w następujący sposób:
źródło
Należy użyć parametru „radix” funkcji „parseInt”: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt?redirectlocale=en-US&redirectslug=JavaScript%2FReference % 2FGlobal_Objects% 2FparseInt
parseInt ('015', 10) => 15
jeśli go nie używasz, jakiś silnik javascript może używać go jako ósemkowego parseInt ('015') => 0
źródło
Jeśli numer jest używany
"" + parseInt(str)
Jeśli liczba jest zmiennoprzecinkowa, użyj
"" + parseFloat(str)
źródło
W inny sposób bez wyrażenia regularnego:
function trimLeadingZerosSubstr(str) { var xLastChr = str.length - 1, xChrIdx = 0; while (str[xChrIdx] === "0" && xChrIdx < xLastChr) { xChrIdx++; } return xChrIdx > 0 ? str.substr(xChrIdx) : str; }
Z krótkim ciągiem będzie szybszy niż regex ( jsperf )
źródło
const input = '0093'; const match = input.match(/^(0+)(\d+)$/); const result = match && match[2] || input;
źródło