कैसे पता चले कि एक स्ट्रिंग 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
हाँ ठीक है, या ईएस 6 का उपयोग न करें, अगर आपके पास ऐसे उपयोगकर्ता हैं जो आईई को एज से अधिक पुराना उपयोग करते हैं।
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.starts कोशिश की ('कुछ जाँच स्ट्रिंग ..') इसने मुझे एक त्रुटि कहा, जिसमें विधि नहीं मिली .. :( लेकिन str.match ने काम नहीं किया। आपके उत्तर के लिए धन्यवाद
Débora

2
बस इस बात का ध्यान रखें कि आप जिस स्ट्रिंग का निरीक्षण कर रहे हैं, उसमें कोई रेगेक्स आरक्षित वर्ण नहीं है।
nokturnal

23
एक रेगेक्स स्ट्रिंग के बजाय एक रेगेक्स ऑब्जेक्ट को पास करने से समस्या @nokturnal उल्लेखों को हल करने के लिए लगता है: str.match(/^Hello/)लेकिन फॉर्म /regex/.test(str)इस विशेष मामले के लिए और भी बेहतर है, प्रति stackoverflow.com/questions/10940137/…
CrazyProro

यह मिलान स्ट्रिंग लौटाएगा, लेकिन बूलियन मान नहीं।
राजकुमार समला

var isUnavailable = $("#StatusId option:selected").text().match("^Unavailable - ");- चयनित विकल्प "अनुपलब्ध - अन्य" होने पर यह वापस क्यों आता है?
उदाहरणार्थ

96

शुरुआत के लिए, आप indexOf का उपयोग कर सकते हैं:

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

...

संदर्भ

और आप 'एंडस्विथ' को निर्धारित करने के लिए स्ट्रिंग की लंबाई के आधार पर गणित कर सकते हैं।

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

11
आप lastIndexOf()सिरों के साथ उपयोग करना चाहते हो सकता है ;)
रिगेल

सावधान, IE8 ब्राउज़र में IndexOf समर्थित नहीं है। LastIndexOf के साथ भी।
पेड्रो लोप्स

1
इस गड़बड़ी के लिए मुझे माफ़ करें। मैं Array.prototyp.indexOf () की बात कर रहा था जो केवल iE9 + के लिए समर्थित है और String.prototyp.indexOf () के लिए IE4 +
पेड्रो लोप्स

3
इस तरह के एक सरल उपयोग के मामले के लिए नियमित अभिव्यक्ति का उपयोग करने की तुलना में बहुत अधिक सुरक्षित उत्तर। शायद जवाब स्वीकार किया जाना चाहिए।
एंटोनचैनिंग

1
'एंडस्विथ' का कोड दोषपूर्ण है। एक स्ट्रिंग की जाँच करते समय जो स्ट्रिंग में दिखाई नहीं देता है और जिसकी लंबाई = (शब्द - 1) है। ई। जी। ("1234".lastIndexOf('Hello') == "1234".length - 'Hello'.length)सच में परिणाम।
निक रसलर

23

ऐसा करने के लिए jQuery की कोई आवश्यकता नहीं है। आप एक jQuery के आवरण को कोड कर सकते हैं लेकिन यह बेकार होगा इसलिए आपको बेहतर उपयोग करना चाहिए

var str = "Hello World";

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

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

के रूप में मैच () विधि पदावनत है।

पुनश्च: RegExp में "i" ध्वज वैकल्पिक है और मामले के लिए असंवेदनशील है (इसलिए यह "हैलो", "hllo", इत्यादि के लिए भी सही होगा)।


2
क्या आप मिलान पर प्रलेखन के लिए एक लिंक प्रदान कर सकते हैं () पदावनत किया जा रहा है? एक त्वरित Google खोज कुछ भी वापस नहीं करता है।
कैविन वॉनडेलेन

1
मैंने पढ़ा है कि कुछ साल पहले, मुझे डर है कि मैं अब बिल्कुल नहीं मिल सकता।
सेबेस्टियन पी।

16

आपको ऐसे कार्यों के लिए वास्तव में jQuery की आवश्यकता नहीं है। ES6 विनिर्देश में वे पहले से ही बॉक्स तरीकों से बाहर है startsWith और 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

वर्तमान में एफएफ और क्रोम में उपलब्ध है । पुराने ब्राउज़रों के लिए आप उनके पॉलीफ़िल या रूट का उपयोग कर सकते हैं


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 अब s की शुरुआत और अंत की जाँच के लिए startsWith()और endsWith()विधि का समर्थन करता है string। यदि आप पूर्व 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

कोई भी स्ट्रिंग जिसमें वर्ण होते हैं जिन्हें regex में उपयोग के लिए बच जाना चाहिए (उदाहरण के लिए ()[].) आपके पॉलीफ़िल तरीकों को तोड़ देगा। आपको रेगेक्स-एस्केप फ़ंक्शन के साथ स्ट्रिंग्स तैयार करने की आवश्यकता है। या इससे भी बेहतर: एक लड़ाई का परीक्षण core-js
पॉलीफ़िल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.