2011-11-26 18 views
46

Suggerisci soluzione per rimuovere o troncare gli zeri iniziali dal numero (qualsiasi stringa) da javascript, jquery.Rimuovi/tronca gli zeri iniziali di javascript/jquery

+3

cosa dovrebbe succedere quando la stringa è "000000000" – robert

+0

Il numero dovrebbe essere sempre un numero intero, oppure dovrebbe gestire numeri con decimali (ad es. ' '00000.5'')? – CMS

+0

dovrebbe dare lavoro a qualsiasi stringa data. Ad esempio "00000evsdd" dovrebbe dare "evsdd", "00000.5" dovrebbe dare ".5" –

risposta

121

È possibile usare un'espressione regolare che corrisponde zeri all'inizio della stringa:

s = s.replace(/^0+/, ''); 
+9

@SomnathMuluk: sarà una sorpresa per molti programmatori javascript! – Bert

+0

@Guffa: lo sto usando nel codice jQuery. Forse perché potrebbe non funzionare. –

+1

@Somnath, jQuery IS javascript. Se qualcosa funziona in javascript continuerà a funzionare anche se ti capita di usare jQuery. –

2

Prova questa,

function ltrim(str, chars) { 
     chars = chars || "\\s"; 
     return str.replace(new RegExp("^[" + chars + "]+", "g"), ""); 
    } 

    var str =ltrim("01545878","0"); 

Più here

+0

sta avendo problemi con il valore stringa dato –

+0

@SomnathMuluk: quale problema. ecco l'esempio funzionante http://jsfiddle.net/AxeUU/ – Gowri

8

Dal momento che lei ha detto "qualsiasi stringa" , Suppongo che questa sia una stringa che vuoi gestire anche tu.

"00012 34 0000432 0035" 

Quindi, regex è la strada da percorrere:

var trimmed = s.replace(/\b0+/g, ""); 

e questo sarà prevenire la perdita di un valore "000000".

var trimmed = s.replace(/\b(0(?!\b))+/g, "") 

Si può vedere un working example here

+2

+1, ottima risposta –

3

ho ottenuto questa soluzione per troncare zeri iniziali (numero o qualsiasi stringa) in 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> 
+3

Questo non è un codice molto buono. Il controllo della lunghezza della stringa è totalmente superfluo, non verrà mai valutato come 'false'. L'uso di '9999' come secondo parametro di' substr' non è necessario. Basta usare 'while (s.substr (0,1) == '0') s = s.substr (1);'. Inoltre, lo snippet di codice sembra davvero vecchio, l'attributo 'language' del tag' script' è stato deprecato per molto tempo, e l'uso dei commenti nei tag 'script' è necessario solo per i browser che non capiscono lo' script' tag affatto, ad es Internet Explorer 1.0. – Guffa

+0

Sta funzionando bene per me .... – Avinash

9

Forse un po' tardi, ma voglio aggiungere i miei 2 centesimi.

se la stringa SEMPRE rappresenta un numero, con possibili zeri iniziali, è sufficiente eseguire il cast della stringa su un numero utilizzando l'operatore '+'.

ad es.

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) 

se la stringa non rappresenta un numero e avete solo bisogno di rimuovere l'uso del 0 del le altre soluzioni, ma se avete solo bisogno di loro come numero, questo è la via più breve.

e FYI si può fare il contrario, i numeri di forza di agire come stringhe se concatenare una stringa vuota per loro, come:

x = 5; 
alert(typeof x); //number 
x = x+""; 
alert(typeof x); //string 

Speranza che aiuta qualcuno

+1

mente che spiega perché questo è stato downvoted? – DiegoDD

+0

non funzionerà con un valore maggiore di 2^53. (+ "009007199254740993"). ToString() sarà "9007199254740992" – madreason

15

Vorrei utilizzare il numero () funzione:

var yourString = "00001"; 
yourString = Number(yourString).toString(); 
+0

non funzionerà con un valore maggiore di 2^53. Numero ("009007199254740993"). ToString() sarà "9007199254740992" – madreason

+1

risposta perfetta !!! prova ad aggiungere qualche altra spiegazione :) – SagarPPanchal

1
parseInt(value) or parseFloat(value) 

Questo funziona bene.

0

Se numero è int uso

"" + parseInt(str) 

Se il numero è l'uso del galleggiante

"" + parseFloat(str) 
0

Un altro modo senza espressione regolare:

function trimLeadingZerosSubstr(str) { 
    var xLastChr = str.length - 1, xChrIdx = 0; 
    while (str[xChrIdx] === "0" && xChrIdx < xLastChr) { 
     xChrIdx++; 
    } 
    return xChrIdx > 0 ? str.substr(xChrIdx) : str; 
} 

Con breve stringa che sarà più veloce di regex (jsperf)

Problemi correlati