Bir dize jQuery belirli bir dize ile başlar / biter nasıl bilmek?


206

Bir dize belirtilen karakter / dize ile başlar veya jQuery ile biter bilmek istiyorum.

Örneğin:

var str = 'Hello World';

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

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

Herhangi bir işlev yoksa alternatif?



2
Evet, ya da IE6'yı Edge'den daha eski kullanan kullanıcılarınız varsa henüz ES6 kullanmayın.
— Antares42

Yanıtlar:


388

Seçeneklerden biri düzenli ifadeler kullanmaktır:

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

if (str.match("World$")) {
   // do this if ends in world
}

1
jQuery str.startsWith ('bazı kontrol dizesi ..') denedim bu bana bir hata verdi, startsWith yöntemi bulunamadı .. :( ama str.match çalıştı. Cevabınız için teşekkürler
— Débora

2
Sadece incelemekte olduğunuz dizede regex ayrılmış karakter içermediğine dikkat edin.
— nokturnal

23
Normal ifade dizesi yerine normal ifade nesnesinin iletilmesi sorunu çözüyor gibi görünüyor @nokturnal bahseder: str.match(/^Hello/)Ancak, stackoverflow.com/questions/10940137/…/regex/.test(str)
— CrazyPyro

Bu eşleşen dize döndürür, ancak boole değeri döndürmez.
— RajKumar Samala

var isUnavailable = $("#StatusId option:selected").text().match("^Unavailable - ");- seçilen seçenek "Kullanılamıyor - Diğer" olduğunda bu niçin döner?
— egmfrs

96

Başlangıçlar için indexOf'u kullanabilirsiniz:

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

...

ref

ve 'bitir' ifadesini belirlemek için dize uzunluğuna göre matematik yapabilirsiniz.

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

11
lastIndexOf()uçlar için kullanmak isteyebilirsiniz;)
— Reigel

Dikkatli olun, IndexOf IE8 Tarayıcısında Desteklenmez. LastIndexOf ile aynı.
— Pedro Lopes

1
Karışıklık için özür dilerim. IE4 + olan String.prototype.indexOf () için değil, yalnızca iE9 + için desteklenen Array.prototype.indexOf () 'ye atıfta bulunuyordum
— Pedro Lopes

3
Böyle basit bir kullanım durumu için düzenli ifadeler kullanmaktan çok daha güvenli bir cevap. Muhtemelen cevap kabul edilmelidir.
— AntonChanning

1
'Endwith' kodu hatalı. Dizede görünmeyen ve length = (word - 1) olan bir dizeyi kontrol ederken. Örneğin. ("1234".lastIndexOf('Hello') == "1234".length - 'Hello'.length)doğru sonuç verir.
— Nick Russler

23

Bunu yapmak için jQuery'ye gerek yoktur. Bir jQuery sarmalayıcısını kodlayabilirsiniz, ancak daha iyi kullanmanız gerekir.

var str = "Hello World";

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

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

match () yöntemi kullanımdan kaldırıldığı için.

Not: RegExp'deki "i" bayrağı isteğe bağlıdır ve büyük / küçük harfe duyarlı değildir (bu nedenle "merhaba", "hEllo" vb. İçin de doğru döner).


2
Kullanımdan kaldırılmış olan match () ile ilgili belgelere bir bağlantı sağlayabilir misiniz? Hızlı bir Google araması hiçbir şey döndürmez.
— Cavyn VonDeylen

1
Birkaç yıl önce çevrimiçi okudum, korkarım artık tam olarak nerede bulamıyorum.
— Sebastien P.

16

Bu tür görevler için gerçekten jQuery'ye ihtiyacınız yoktur. ES6 belirtiminde, zaten kutudan çıkmış yöntemleri vardırWith ve endWith ile başlar .

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

Şu anda FF ve Chrome'da mevcut . Eski tarayıcılar için çoklu dolgularını veya alt dizinlerini kullanabilirsiniz.


10

StringPrototipi her zaman şu şekilde genişletebilirsiniz :

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

Ve şu şekilde kullanın:

var str = 'Hello World';

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

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

2

ES6 artık s'nin başlangıcını ve sonunu kontrol etmek için startsWith()ve endsWith()yöntemini desteklemektedir string. Pre-es6 motorlarını desteklemek istiyorsanız, Stringprototipe önerilen yöntemlerden birini eklemeyi düşünebilirsiniz .

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

Bir normal ifadede kullanım için kaçması gereken karakterler içeren herhangi bir dize (örneğin ()[].) çoklu doldurma yöntemlerinizi bozacaktır. Dizeleri regex-escape işleviyle hazırlamanız gerekir. Ya da daha iyisi: Savaş testinden core-js
— geçmiş çok amaçlı dolgu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.