จะทราบได้อย่างไรว่าสตริงเริ่มต้น / สิ้นสุดด้วยสตริงเฉพาะใน jQuery


206

ฉันต้องการทราบว่าสตริงเริ่มต้นด้วยอักขระ / สตริงที่ระบุหรือลงท้ายด้วย jQuery

ตัวอย่างเช่น:

var str = 'Hello World';

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

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

หากไม่มีฟังก์ชั่นใด ๆ ก็มีทางเลือกอื่น ๆ ?



2
ใช่แล้วหรือไม่ใช้ ES6 ถ้าคุณมีผู้ใช้ที่ใช้ IE ที่เก่ากว่า Edge
Antares42

คำตอบ:


388

ทางเลือกหนึ่งคือใช้นิพจน์ทั่วไป:

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

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

1
ใน jQuery ฉันลอง str.startsWith ('สตริงการตรวจสอบบางอย่าง .. ') สิ่งนี้ทำให้ฉันมีข้อผิดพลาดที่บอกว่า startsWith วิธีการไม่พบ .. :( แต่ str.match ทำงานขอบคุณสำหรับคำตอบของคุณ
Débora

2
เพียงระวังสตริงที่คุณกำลังตรวจสอบไม่มีอักขระที่สงวนไว้ regex
nokturnal

23
ผ่านวัตถุ regex แทนที่จะเป็นสตริง regex ดูเหมือนว่าจะแก้ปัญหา @nokturnal กล่าวถึง: str.match(/^Hello/)แต่รูปแบบที่/regex/.test(str)ดียิ่งขึ้นสำหรับกรณีนี้โดยเฉพาะต่อstackoverflow.com/questions/10940137/ …
CrazyPyro

นี่จะส่งคืนสตริงที่ตรงกัน แต่ไม่ใช่ค่าบูลีน
RajKumar Samala

var isUnavailable = $("#StatusId option:selected").text().match("^Unavailable - ");- เหตุใดผลตอบแทนนี้จึงเป็นโมฆะเมื่อตัวเลือกที่เลือกคือ "ไม่พร้อมใช้งาน - อื่น ๆ "
egmfrs

96

สำหรับ startswith คุณสามารถใช้ indexOf:

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

...

อ้าง

และคุณสามารถทำคณิตศาสตร์ตามความยาวของสตริงเพื่อกำหนด 'endswith'

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

11
คุณอาจต้องการใช้lastIndexOf()สำหรับ endswith;)
Reigel

ระวัง IndexOf ไม่รองรับในเบราว์เซอร์ IE8 เหมือนกับ lastIndexOf
Pedro Lopes

1
ฉันขอโทษสำหรับความสับสน ฉันหมายถึง Array.prototype.indexOf () ที่รองรับเฉพาะ iE9 + ไม่ใช่ String.prototype.indexOf () นั่นคือ IE4 +
Pedro Lopes

3
คำตอบที่ปลอดภัยกว่าการใช้นิพจน์ทั่วไปเช่นกรณีการใช้งานที่ง่าย คำตอบควรจะได้รับการยอมรับ
AntonChanning

1
รหัสสำหรับ 'endswith' เป็นความผิดพลาด เมื่อตรวจสอบสตริงที่ไม่ปรากฏในสตริงและมีความยาว = (คำ - 1) เช่น. ("1234".lastIndexOf('Hello') == "1234".length - 'Hello'.length)ผลลัพธ์เป็นจริง
Nick Russler

23

jQuery ไม่จำเป็นต้องทำเช่นนั้น คุณสามารถเขียนโค้ดของ jQuery wrapper แต่มันจะไร้ประโยชน์ดังนั้นคุณควรใช้

var str = "Hello World";

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

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

เป็นวิธีการจับคู่ () ถูกคัดค้าน

PS: แฟล็ก "i" ใน RegExp เป็นทางเลือกและหมายถึงตัวพิมพ์เล็กและตัวพิมพ์เล็ก (ดังนั้นมันจะส่งคืนค่าจริงสำหรับ "hello", "hEllo" ฯลฯ )


2
คุณสามารถให้ลิงค์ไปยังเอกสารเกี่ยวกับการจับคู่ () ถูกเลิกใช้งานหรือไม่? การค้นหาโดย Google ที่รวดเร็วไม่ส่งคืนสิ่งใด
Cavyn VonDeylen

1
ฉันอ่านออนไลน์เมื่อไม่กี่ปีที่ผ่านมาฉันเกรงว่าจะหาที่ไหนไม่ได้อีกแล้ว
เซบาสเตียนพี.

16

คุณไม่จำเป็นต้องใช้ jQuery สำหรับงานดังกล่าว ในข้อกำหนดของ ES6 พวกเขามีวิธีการใช้งานแบบกล่องเริ่มแล้วด้วยและสิ้นสุดด้วย

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

ขณะนี้สามารถใช้ได้ใน FF และ Chrome สำหรับเบราว์เซอร์เก่าคุณสามารถใช้ polyfills หรือ substr


10

คุณสามารถขยายStringต้นแบบเช่นนี้ได้ตลอดเวลา:

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

และใช้มันเช่นนี้

var str = 'Hello World';

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

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

2

ES6 รองรับstartsWith()และendsWith()วิธีการตรวจสอบจุดเริ่มต้นและจุดสิ้นสุดของstrings หากคุณต้องการสนับสนุนเอ็นจิน pre-es6 คุณอาจต้องการพิจารณาเพิ่มหนึ่งในวิธีที่แนะนำไปยัง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

สตริงใด ๆ ที่มีอักขระที่จำเป็นต้องใช้ Escape สำหรับการใช้งานใน regex (ตัวอย่าง()[].) จะทำให้เมธอด polyfill ของคุณแตก คุณต้องเตรียมสตริงด้วยฟังก์ชัน regex-escape หรือดียิ่งขึ้น: ใช้การทดสอบการต่อสู้ polyfill จากcore-js
nirazul
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.