2010-09-15 5 views
173

Я хочу знать, начинается ли строка с указанным символом/строкой или заканчивается в jQuery.Как узнать, что строка начинается/заканчивается определенной строкой в ​​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'); 
} 

Если нет какой-либо функции, то любая альтернатива?

+0

Используйте [ES6 новые функции] (http://stackoverflow.com/a/25797279/1090562) –

+1

Да ну, или не использовать ES6 но если у вас есть пользователи, которые используют IE старше Edge. – Antares42

ответ

329

Одним из вариантов является использование регулярных выражений:

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

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

in jQuery Я попробовал str.startsWith («некоторая проверка строки ..»), это дало мне ошибку: startWith метод не найден .. :(но str.match работал. Спасибо за ваш ответ –

+2

Просто будьте осторожны с строкой, в которой вы находитесь проверка не содержит зарезервированных символов регулярного выражения. – nokturnal

+16

Передача объекта регулярного выражения, а не строки регулярного выражения, как представляется, решает проблему. @nokturnal упоминает: 'str.match (/^Hello /)' Но форма '/regex/.test (/ str) 'еще лучше для этого конкретного случая, по http://stackoverflow.com/questions/10940137/regex-test-vs-string-match-to-know-if-a-string-matches--regular- выражение – CrazyPyro

84

Для StartsWith, вы можете использовать IndexOf:

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

...

ref

и вы можете сделать математику на основе длины строки для определения 'EndsWith'.

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

вы можете использовать 'lastIndexOf()' для endswith;) – Reigel

+0

Осторожно, IndexOf не поддерживается в браузере IE8. То же самое с lastIndexOf. –

+1

Прошу прощения за путаницу. Я имел в виду Array.prototype.indexOf(), который поддерживается только для iE9 +, а не для String.prototype.indexOf(), это IE4 + –

19

Там нет необходимости JQuery, чтобы сделать это. Вы можете закодировать обертка JQuery, но это было бы бесполезно, так что вы должны лучше использовать

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 является необязательным и означает регистр, нечувствительный к регистру (поэтому он также вернет true для «hello», «hEllo» и т. Д.).

+1

+1 Протестировано здесь: http://jsfiddle.net/zTLrU/ – NAVEED

+1

+1 Спасибо за включение части, не учитывающей регистр. –

+2

Можете ли вы предоставить ссылку на docum при условии, что match() устарел? Быстрый поиск Google ничего не возвращает. –

10

Вам не нужен 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 

Currently available in FF and Chrome. Для старых браузеров вы можете использовать их polyfills или SUBSTR

+3

Не работает в IE10 или 11 –

7

вы всегда можете расширить струнный прототип как это:

// 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' 
} 
0

ES6 теперь поддерживает startsWith() и endsWith() метод для проверки начала и окончания string s. Если вы хотите поддерживать двигатели 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(startsWith("foob"); // true 
console.log(endsWith("rfoo"); // true 
Смежные вопросы