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
예. Edge보다 오래된 IE를 사용하는 사용자가있는 경우 ES6을 사용하지 마십시오.
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 근무 답변 주셔서 감사합니다.
데보라

2
검사하는 문자열에 정규식 예약 문자가 포함되지 않도록주의하십시오.
야행성

23
정규식 문자열 대신 정규식 객체를 전달하면 문제 @nokturnal 언급 해결하는 것 같다 str.match(/^Hello/)하지만 형태는 /regex/.test(str)당, 더 나은이 특정 사건에 대한 것입니다 stackoverflow.com/questions/10940137/...
CrazyPyro

이것은 일치하는 문자열을 반환하지만 부울 값은 반환하지 않습니다.
RajKumar Samala

var isUnavailable = $("#StatusId option:selected").text().match("^Unavailable - ");-선택한 옵션이 "사용할 수 없음-기타"인 경우 왜 이것이 null을 반환합니까?
egmfrs

96

시작하려면 indexOf를 사용할 수 있습니다.

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

...

심판

문자열 길이를 기반으로 수학을 수행하여 'endswith'를 결정할 수 있습니다.

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

11
당신은 사용 할 수 있습니다 lastIndexOf()endswith에 대한)
Reigel

IE8 브라우저에서는 IndexOf가 지원되지 않습니다. lastIndexOf와 동일합니다.
Pedro Lopes

1
혼란을 드려 죄송합니다. IE4 + 인 String.prototype.indexOf ()가 아닌 iE9 +에서만 지원되는 Array.prototype.indexOf ()를 언급했습니다.
Pedro Lopes

3
간단한 사용 사례에 정규식을 사용하는 것보다 훨씬 안전한 답변입니다. 아마도 받아 들여질 것입니다.
AntonChanning

1
'endswith'의 코드에 결함이 있습니다. 문자열에 나타나지 않고 길이 = (word-1) 인 문자열을 확인할 때. 예 : ("1234".lastIndexOf('Hello') == "1234".length - 'Hello'.length)사실.
Nick Russler

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));

match () 메소드는 더 이상 사용되지 않습니다.

PS : RegExp의 "i"플래그는 선택 사항이며 대소 문자를 구분하지 않습니다 (따라서 "hello", "hEllo"등에도 true를 리턴 함).


2
더 이상 사용되지 않는 match ()에 대한 문서 링크를 제공 할 수 있습니까? 빠른 Google 검색은 아무 것도 반환하지 않습니다.
Cavyn VonDeylen

1
몇 년 전에 온라인에서 읽었으며 더 이상 정확하게 찾을 수 없을 것 같습니다.
Sebastien P.

16

이러한 작업에 실제로 jQuery가 필요하지 않습니다. ES6 사양에서는 이미 beginWithendsWith 메소드를 가지고 있습니다 .

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에서 사용할 수 있습니다 . 오래된 브라우저의 경우 polyfill 또는 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는 이제 s의 시작과 끝을 확인하기위한 startsWith()endsWith()방법을 지원합니다 string. 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

정규식에서 사용하기 위해 이스케이프해야하는 문자가 포함 된 문자열 (예 ()[].:)은 polyfill 메서드를 손상시킵니다. 정규식 이스케이프 기능을 사용하여 문자열을 준비해야합니다. 또는 더 나은 방법 :core-js
nirazul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.