Bagaimana mengetahui bahwa sebuah string dimulai / diakhiri dengan string tertentu di jQuery?

206

Saya ingin tahu apakah sebuah string dimulai dengan karakter / string yang ditentukan atau diakhiri dengan jQuery.

Sebagai contoh:

var str = 'Hello World';

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

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

Jika tidak ada fungsi maka ada alternatif?

Naveed
sumber
Gunakan fitur baru ES6
Salvador Dali
2
Ya baik, atau belum menggunakan ES6 jika Anda memiliki pengguna yang menggunakan IE yang lebih tua dari Edge.
Antares42

Jawaban:

388

Salah satu opsi adalah menggunakan ekspresi reguler:

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

if (str.match("World$")) {
   // do this if ends in world
}
Lukáš Lalinský
sumber
1
di jQuery saya mencoba str.startsWith ('beberapa memeriksa string ..') ini memberi saya kesalahan mengatakan, dimulai dengan metode tidak ditemukan .. :( tapi str.match bekerja. Terima kasih atas jawaban Anda
Débora
2
Hanya hati-hati string yang Anda periksa tidak mengandung karakter yang dicadangkan regex.
nokturnal
23
Melewati objek regex alih-alih string regex tampaknya untuk menyelesaikan masalah @nokturnal menyebutkan: str.match(/^Hello/)Tetapi formulir /regex/.test(str)ini lebih baik untuk kasus khusus ini, per stackoverflow.com/questions/10940137/…
CrazyPyro
Ini akan mengembalikan string yang cocok, tetapi bukan nilai boolean.
RajKumar Samala
var isUnavailable = $("#StatusId option:selected").text().match("^Unavailable - ");- mengapa ini mengembalikan null ketika opsi yang dipilih adalah "Tidak tersedia - Lainnya"?
egmfrs
96

Sebagai permulaan, Anda dapat menggunakan indexOf:

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

...

ref

dan Anda dapat melakukan matematika berdasarkan panjang string untuk menentukan 'endswith'.

if(str.lastIndexOf('Hello') == str.length - 'Hello'.length) {
sje397
sumber
11
Anda mungkin ingin menggunakan lastIndexOf()untuk endswith;)
Reigel
Hati-hati, IndexOf tidak Didukung di Browser IE8. Sama dengan lastIndexOf.
Pedro Lopes
1
Saya minta maaf atas kebingungannya. Saya merujuk ke Array.prototype.indexOf () yang didukung hanya untuk iE9 + dan bukan String.prototype.indexOf () yang IE4 +
Pedro Lopes
3
Jawaban yang jauh lebih aman daripada menggunakan ekspresi reguler untuk kasus penggunaan yang sederhana. Mungkin sebaiknya diterima jawaban.
AntonChanning
1
Kode untuk 'endswith' salah. Saat memeriksa string yang tidak muncul dalam string dan yang memiliki panjang = (kata - 1). E. g. ("1234".lastIndexOf('Hello') == "1234".length - 'Hello'.length)menghasilkan true.
Nick Russler
23

Tidak perlu jQuery untuk melakukan itu. Anda bisa mengkodekan pembungkus jQuery tetapi itu akan sia-sia jadi sebaiknya Anda gunakan

var str = "Hello World";

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

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

karena metode match () tidak digunakan lagi.

PS: bendera "i" di RegExp adalah opsional dan singkatan dari case-sensitive (jadi ini juga akan mengembalikan true untuk "hello", "hEllo", dll.).

Sebastien P.
sumber
2
Bisakah Anda memberikan tautan ke dokumentasi saat pertandingan () tidak digunakan lagi? Pencarian cepat Google tidak menghasilkan apa-apa.
Cavyn VonDeylen
1
Saya membaca itu online beberapa tahun yang lalu, saya khawatir saya tidak dapat menemukan di mana tepatnya lagi.
Sebastien P.
16

Anda tidak benar-benar membutuhkan jQuery untuk tugas-tugas seperti itu. Dalam spesifikasi ES6 mereka sudah memiliki keluar dari metode kotak startsWith dan 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

Saat ini tersedia dalam FF dan Chrome . Untuk browser lama, Anda dapat menggunakan polyfill atau substr

Salvador Dali
sumber
10

Anda selalu dapat memperluas Stringprototipe seperti ini:

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

Dan gunakan seperti ini:

var str = 'Hello World';

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

if( str.endsWith('World') ) {
   // your string ends with 'World'
}
Tuan Pumpkin
sumber
2

ES6 sekarang mendukung startsWith()dan endsWith()metode untuk memeriksa awal dan akhir strings. Jika Anda ingin mendukung mesin pre-es6, Anda mungkin ingin mempertimbangkan untuk menambahkan salah satu metode yang disarankan ke Stringprototipe.

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
16kb
sumber
Setiap string yang berisi karakter yang perlu diloloskan untuk penggunaan dalam regex (misalnya ()[].) akan merusak metode polyfill Anda. Anda perlu menyiapkan string dengan fungsi regex-escape. Atau bahkan lebih baik: Gunakan polyfill yang sudah teruji pertempuran daricore-js
nirazul