Supprimer le premier caractère d'une chaîne en Javascript

506

Je veux supprimer le premier caractère d'une chaîne, si le premier caractère est un 0. Le 0 peut être là plusieurs fois.

Existe-t-il une fonction simple qui vérifie le premier caractère et le supprime s'il est 0?

En ce moment, j'essaye avec la slice()fonction JS mais c'est très gênant.

Jings
la source

Réponses:

764

Vous pouvez supprimer le premier caractère d'une chaîne en utilisant substr:

var s1 = "foobar";
var s2 = s1.substr(1);
alert(s2); // shows "oobar"

Pour supprimer tous les 0 au début de la chaîne:

var s = "0000test";
while(s.charAt(0) === '0')
{
 s = s.substr(1);
}
Ombré
la source
11
@Stephen: Dans ce cas, cela ne ferait aucune différence car charAtrenvoie toujours une chaîne, même si l'index dépasse l'indice du dernier caractère, donc aucune contrainte de type n'est effectuée, et l'algorithme finit par être identique. Mais je préfère ne ===plus ==même quand il ne fait pas de différence. ;)
user113716
4
@Hejner: Si les types sont les mêmes, comme ils le seraient toujours dans ce cas, alors ===et ==effectuez précisément les mêmes étapes (selon la spécification, au moins), donc il n'y a aucune raison de s'attendre à ce que l'un fonctionne mieux que l'autre .
Tim Down
2
@MiguelCoder. Selon la spécification, les étapes sont les mêmes (les implémentations du navigateur peuvent différer, bien sûr). Lisez-le si vous ne me croyez pas.
Tim Down
3
@ReallyNiceCode mettant de côté le fait que la question a été posée il y a plus de 8 ans. Il a été déclaré: "Le 0 peut être présent plusieurs fois". et le demandeur a accepté ma solution.
Shaded
6
Bien que toujours valide, vous devez mettre à jour votre réponse en la remplaçant substrpar substring. Vérifiez MDN: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Soul Reaver
187

Le code très lisible est à utiliser .substring()avec un début défini sur l'index du deuxième caractère (1) (le premier caractère a l'index 0). Le deuxième paramètre de la .substring()méthode est en fait facultatif, vous n'avez donc même pas besoin d'appeler .length()...

TL; DR: Supprimer le premier caractère de la chaîne:

str = str.substring(1);

...Oui, il est aussi simple que cela...

Suppression de certains caractères particuliers:

Comme l'a suggéré @Shaded, bouclez-le simplement pendant que le premier caractère de votre chaîne est le caractère "indésirable" ...

var yourString = "0000test";
var unwantedCharacter = "0";
//there is really no need for === check, since we use String's charAt()
while( yourString.charAt(0) == unwantedCharacter ) yourString = yourString.substr(1);
//yourString now contains "test"

.slice()vs .substring()vs.substr()

Citation de (et plus à ce sujet dans) Quelle est la différence entre String.slice et String.substring?

Il souligne également que si les paramètres à découper sont négatifs, ils référencent la chaîne depuis la fin. La sous-chaîne et le substrat ne le font pas.

jave.web
la source
84

Utilisez .charAt()et .slice().

Exemple: http://jsfiddle.net/kCpNQ/

var myString = "0String";

if( myString.charAt( 0 ) === '0' )
    myString = myString.slice( 1 );

S'il peut y avoir plusieurs 0caractères au début, vous pouvez remplacer le if()par a while().

Exemple: http://jsfiddle.net/kCpNQ/1/

var myString = "0000String";

while( myString.charAt( 0 ) === '0' )
    myString = myString.slice( 1 );
user113716
la source
61

La façon la plus simple de supprimer tous les 0s principaux est:

var s = "00test";
s = s.replace(/^0+/, "");

Si vous supprimez simplement un seul 0caractère principal , comme l'indique la question, vous pouvez utiliser

s = s.replace(/^0/, "");
Tim Down
la source
26

Vous pouvez le faire avec la méthode de sous-chaîne :

let a = "My test string";

a = a.substring(1);

console.log(a); // y test string
Andrew
la source
7
var s = "0test";
if(s.substr(0,1) == "0") {
    s = s.substr(1);
}

Pour tous 0s: http://jsfiddle.net/An4MY/

String.prototype.ltrim0 = function() {
 return this.replace(/^[0]+/,"");
}
var s = "0000test".ltrim0();
zsalzbank
la source
Oui, cela fonctionnerait, si un seul 0 est dans la chaîne. Mais j'en ai aussi besoin si la chaîne ressemble à var s = "00test0"; alors seuls les deux premiers 0 ont dû être remplacés
Jings
1
Pourquoi ne pas charAt? Pourquoi les crochets? Pourquoi une extension de prototype? Beurk.
Ry-
6
//---- remove first and last char of str    
str = str.substring(1,((keyw.length)-1));

//---- remove only first char    
str = str.substring(1,(keyw.length));

//---- remove only last char    
str = str.substring(0,(keyw.length));
bambolobred
la source
4

String.prototype.trimStartWhile = function(predicate) {
    if (typeof predicate !== "function") {
    	return this;
    }
    let len = this.length;
    if (len === 0) {
        return this;
    }
    let s = this, i = 0;
    while (i < len && predicate(s[i])) {
    	i++;
    }
    return s.substr(i)
}

let str = "0000000000ABC",
    r = str.trimStartWhile(c => c === '0');
    
console.log(r);

ChaosPandion
la source
3

En voici un qui ne suppose pas que l'entrée est un string, utilise substringet est livré avec quelques tests unitaires:

var cutOutZero = function(value) {
    if (value.length && value.length > 0 && value[0] === '0') {
        return value.substring(1);
    }

    return value;
};

http://jsfiddle.net/TRU66/1/

bdukes
la source
2

essayer

s.replace(/^0/,'')

Kamil Kiełczewski
la source
0
var test = '0test';
test = test.replace(/0(.*)/, '$1');
kelloti
la source
2
Cela ne fonctionne pas comme prévu et est également très inefficace.
Ry-
0

De l'implémentation Javascript de trim ()> qui supprime les espaces de début et de fin des chaînes. Voici une implémentation modifiée de la réponse à cette question.

var str = "0000one two three0000"; //TEST  
str = str.replace(/^\s+|\s+$/g,'0'); //ANSWER

Implémentation originale pour cela sur JS

string.trim():
if (!String.prototype.trim) {
 String.prototype.trim = function() {
  return this.replace(/^\s+|\s+$/g,'');
 }
}
fino
la source
nous ne considérons pas la confusion comme un problème d'implémentation, cependant, elle est souvent attribuée à un manque de capacité à suivre les variables que votre environnement vous présente. Dans ce cas, vos connexions neuronales sont incapables de gérer la compréhension nécessaire de cette adoption modifiée d'une implémentation de la fonction js native comme réponse à la question d'origine.
fino