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.

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

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.



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/, "");

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


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

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

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


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/



0
var test = '0test';
test = test.replace(/0(.*)/, '$1');

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,'');
 }
}

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.