Làm thế nào để biết rằng một chuỗi bắt đầu / kết thúc với một chuỗi cụ thể trong jQuery?


206

Tôi muốn biết nếu một chuỗi bắt đầu bằng ký tự / chuỗi được chỉ định hoặc kết thúc bằng chuỗi đó trong jQuery.

Ví dụ:

var str = 'Hello World';

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

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

Nếu không có chức năng nào thì có phương án nào không?



2
Vâng, hoặc chưa sử dụng ES6 nếu bạn có người dùng sử dụng IE cũ hơn Edge.
Antares42

Câu trả lời:


388

Một tùy chọn là sử dụng các biểu thức thông thường:

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

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

1
trong jQuery Tôi đã thử str.startsWith ('một số chuỗi kiểm tra ..') điều này gây ra lỗi cho tôi, bắt đầu Phương thức không tìm thấy .. :( nhưng str.match đã hoạt động. Cảm ơn câu trả lời của bạn
Débora

2
Chỉ cần cẩn thận, chuỗi bạn đang kiểm tra không chứa bất kỳ ký tự dành riêng regex nào.
nokturnal

23
Truyền một đối tượng regex thay vì chuỗi regex dường như giải quyết vấn đề @nokturnal đề cập: str.match(/^Hello/)Nhưng hình thức /regex/.test(str)thậm chí còn tốt hơn cho trường hợp cụ thể này, trên stackoverflow.com/questions/10940137/
Kẻ

Điều này sẽ trả về chuỗi khớp, nhưng không phải giá trị boolean.
RajKumar Samala

var isUnavailable = $("#StatusId option:selected").text().match("^Unavailable - ");- tại sao điều này trả về null khi tùy chọn được chọn là "Không khả dụng - Khác"?
egmfrs

96

Để bắt đầu, bạn có thể sử dụng indexOf:

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

...

tham chiếu

và bạn có thể thực hiện các phép toán dựa trên độ dài chuỗi để xác định 'endswith'.

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

11
bạn có thể muốn sử dụng lastIndexOf()cho endswith;)
Reigel

Cẩn thận, IndexOf không được hỗ trợ trong Trình duyệt IE8. Tương tự với last IndexOf.
Pedro Lopes

1
Tôi xin lỗi vì sự hiểu nhầm. Tôi đã đề cập đến Array.prototype.indexOf () chỉ được hỗ trợ cho iE9 + chứ không phải String.prototype.indexOf () đó là IE4 +
Pedro Lopes

3
Một câu trả lời an toàn hơn nhiều so với việc sử dụng các biểu thức thông thường cho trường hợp sử dụng đơn giản như vậy. Có lẽ nên được chấp nhận câu trả lời.
AntonChanning

1
Mã cho 'endswith' bị lỗi. Khi kiểm tra một chuỗi không xuất hiện trong chuỗi và có độ dài = (từ - 1). Ví dụ. ("1234".lastIndexOf('Hello') == "1234".length - 'Hello'.length)kết quả đúng
Nick Russler

23

Không cần jQuery để làm điều đó. Bạn có thể mã hóa trình bao bọc jQuery nhưng nó sẽ vô dụng vì vậy bạn nên sử dụng tốt hơn

var str = "Hello World";

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

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

như phương thức match () không được dùng nữa.

PS: cờ "i" trong RegExp là tùy chọn và không có nghĩa là không phân biệt chữ hoa chữ thường (vì vậy nó cũng sẽ trả về true cho "hello", "hEllo", v.v.).


2
Bạn có thể cung cấp một liên kết đến tài liệu về trận đấu () bị phản đối không? Tìm kiếm nhanh trên Google không trả lại bất cứ điều gì.
Cavyn VonDeylen

1
Tôi đã đọc trên mạng vài năm trước, tôi sợ rằng mình không thể tìm thấy chính xác ở đâu nữa.
Sebastien P.

16

Bạn không thực sự cần jQuery cho các nhiệm vụ như vậy. Trong đặc tả ES6, họ đã có sẵn các phương thức hộp startWithendWith .

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

Hiện có sẵn trong FF và Chrome . Đối với các trình duyệt cũ, bạn có thể sử dụng polyfill hoặc chất nền của chúng


10

Bạn luôn có thể mở rộng Stringnguyên mẫu như thế này:

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

Và sử dụng nó như thế này:

var str = 'Hello World';

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

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

2

ES6 hiện hỗ trợ startsWith()endsWith()phương thức kiểm tra bắt đầu và kết thúc của strings. Nếu bạn muốn hỗ trợ các công cụ pre-es6, bạn có thể muốn xem xét thêm một trong các phương thức được đề xuất vào Stringnguyên mẫu.

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

Bất kỳ chuỗi nào chứa các ký tự cần được thoát để sử dụng trong regex (ví dụ ()[].) sẽ phá vỡ các phương thức polyfill của bạn. Bạn cần chuẩn bị các chuỗi với chức năng thoát regex. Hoặc thậm chí tốt hơn: Sử dụng một polyfill được thử nghiệm từcore-js
nirazul
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.