1141 votes

endsWith en javascript

Comment puis-je vérifier si une chaîne se termine par un caractère particulier en javascript? Exemple j'ai une chaîne dire

var str = "mystring#";

Je veux savoir si la chaîne de caractères str, il se termine avec #. Comment puis-je le vérifier?

  1. Est-il un endsWith() méthode en javascript?

  2. Une solution que j'ai est de prendre la longueur de la chaîne et le dernier caractère de la case.

Est-ce la meilleure manière, ou il n'y a aucune autre façon?

1783voto

chakrit Points 29562

Je sais que c'est un an de question... mais j'ai besoin de ce trop et j'en ai besoin pour le travail de la croix-navigateur... en combinant tous les réponses et les commentaires et à le simplifier un peu:

String.prototype.endsWith = function(suffix) {
    return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
  • Ne pas créer une sous-chaîne
  • Utilise natif indexOf fonction pour les résultats les plus rapides
  • Passez inutile comparaisons à l'aide de la deuxième paramètre de indexOf à venir la sauter
  • Fonctionne dans Internet Explorer
  • PAS de Regex complications

Aussi, si vous n'aimez pas la farce des choses dans natif de données de la structure de prototypes, ici est une version autonome:

function endsWith(str, suffix) {
    return str.indexOf(suffix, str.length - suffix.length) !== -1;
}

EDIT: Comme le fait remarquer @hamish dans les commentaires, si vous voulez err sur le côté sécuritaire et vérifier si une mise en œuvre ont déjà été fournis, vous pouvez juste ajoute un typeof vérifier:

if (typeof String.prototype.endsWith !== 'function') {
    String.prototype.endsWith = function(suffix) {
        return this.indexOf(suffix, this.length - suffix.length) !== -1;
    };
}

299voto

Mike Samuel Points 54712
/#$/.test(str)

fonctionne sur tous les navigateurs, n'a pas besoin monkey patching String, et ne nécessite pas de numérisation de l'ensemble de la chaîne en tant que lastIndexOf lorsqu'il n'y a pas de match.

Si vous voulez faire correspondre une constante chaîne de caractères qui peut contenir de l'expression régulière de caractères spéciaux, tels que l' '$', alors vous pouvez utiliser les éléments suivants:

function makeSuffixRegExp(suffix, caseInsensitive) {
  return new RegExp(
      String(suffix).replace(/[$%()*+.?\[\\\]{|}]/g, "\\$&") + "$",
      caseInsensitive ? "i" : "");
}

et puis vous pouvez l'utiliser comme ceci

makeSuffixRegExp("a[complicated]*suffix*").test(str)

94voto

unpluggd Points 5390
  1. Malheureusement pas.
  2. if( "mystring#".substr(-1) === "#" ) {}

68voto

Oskar Liljeblad Points 431

Allez, c'est la bonne endsWith mise en œuvre:

String.prototype.endsWith = function (s) {
  return this.length >= s.length && this.substr(this.length - s.length) == s;
}

à l'aide de lastIndexOf crée juste inutile CPU boucles si il n'y a pas de match.

57voto

Jon Skeet Points 692016

Cette version évite de créer une sous-chaîne, et ne pas utiliser des expressions régulières (certains regex ici les réponses vont travailler; d'autres sont cassées):

String.prototype.endsWith = function(str)
{
    var lastIndex = this.lastIndexOf(str);
    return (lastIndex != -1) && (lastIndex + str.length == this.length);
}

Si la performance est importante pour vous, il serait intéressant de tester si l' lastIndexOf est effectivement plus rapide que la création d'une sous-chaîne ou pas. (Il peut très bien dépendre de la JS moteur que vous utilisez...), Il pourrait bien être le plus rapide dans l'appariement des cas, et lorsque la chaîne est petite mais quand la ficelle est énorme, il doit regarder en arrière à travers l'ensemble de la chose, même si nous n'avons pas vraiment de soins :(

Pour la vérification d'un seul personnage, la recherche de la longueur, puis en utilisant charAt est probablement la meilleure façon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X