web-dev-qa-db-fra.com

Comment savoir qu'une chaîne commence / se termine par une chaîne spécifique dans jQuery?

Je veux savoir si une chaîne commence par le caractère/chaîne spécifié ou se termine par jQuery.

Par exemple:

var str = 'Hello World';

if( str starts with 'Hello' ) {
   alert('true');
} else {
   alert('false');
}

if( str ends with 'World' ) {
   alert('true');
} else {
   alert('false');
}

S'il n'y a pas de fonction alors aucune alternative?

198
Naveed

Une option consiste à utiliser des expressions régulières:

if (str.match("^Hello")) {
   // do this if begins with Hello
}

if (str.match("World$")) {
   // do this if ends in world
}
374
Lukáš Lalinský

Pour startswith, vous pouvez utiliser indexOf:

if(str.indexOf('Hello') == 0) {

...

ref

et vous pouvez faire les calculs en fonction de la longueur de la chaîne pour déterminer "endswith".

if(str.lastIndexOf('Hello') == str.length - 'Hello'.length) {
90
sje397

JQuery n’a nul besoin de le faire. Vous pouvez coder un wrapper jQuery mais cela ne servirait à rien, vous devriez donc mieux utiliser

var str = "Hello World";

window.alert("Starts with Hello ? " + /^Hello/i.test(str));        

window.alert("Ends with Hello ? " + /Hello$/i.test(str));

car la méthode match () est obsolète.

PS: le drapeau "i" dans RegExp est optionnel et signifie "insensible à la casse" (donc, il retournera aussi vrai pour "hello", "hEllo", etc.).

22
Sebastien P.

Vous n'avez pas vraiment besoin de jQuery pour de telles tâches. Dans la spécification ES6, il existe déjà des méthodes prêtes à l'emploi startsWith et endsWith .

var str = "To be, or not to be, that is the question.";
alert(str.startsWith("To be"));         // true
alert(str.startsWith("not to be"));     // false
alert(str.startsWith("not to be", 10)); // true

var str = "To be, or not to be, that is the question.";
alert( str.endsWith("question.") );  // true
alert( str.endsWith("to be") );      // false
alert( str.endsWith("to be", 19) );  // true

actuellement disponible dans FF et Chrome . Pour les anciens navigateurs, vous pouvez utiliser leurs polyfill ou substr

15
Salvador Dali

Vous pouvez toujours étendre le prototype String comme ceci:

//  Checks that string starts with the specific string
if (typeof String.prototype.startsWith != 'function') {
    String.prototype.startsWith = function (str) {
        return this.slice(0, str.length) == str;
    };
}

//  Checks that string ends with the specific string...
if (typeof String.prototype.endsWith != 'function') {
    String.prototype.endsWith = function (str) {
        return this.slice(-str.length) == str;
    };
}

Et utilisez-le comme ceci:

var str = 'Hello World';

if( str.startsWith('Hello') ) {
   // your string starts with 'Hello'
}

if( str.endsWith('World') ) {
   // your string ends with 'World'
}
9
Mr. Pumpkin

ES6 prend désormais en charge la méthode startsWith() et endsWith() pour vérifier le début et la fin de strings. Si vous souhaitez prendre en charge les moteurs pré-es6, vous pouvez envisager d’ajouter une des méthodes suggérées au prototype String.

if (typeof String.prototype.startsWith != 'function') {
  String.prototype.startsWith = function (str) {
    return this.match(new RegExp("^" + str));
  };
}

if (typeof String.prototype.endsWith != 'function') {
  String.prototype.endsWith = function (str) {
    return this.match(new RegExp(str + "$"));
  };
}

var str = "foobar is not barfoo";
console.log(str.startsWith("foob"); // true
console.log(str.endsWith("rfoo");   // true
2
16kb