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.