Напишем функцию на JavaScript, которая возвращает истину (true), если строка начинается на передаваемое в неё значение или ложь (false), если строка не начинается на передаваемое в неё значение. Мы напишем своё собственное решение, потому что в стандартном методе startsWith() есть некоторые неудобные нюансы работы.
Функция будет принимать 2 параметра:
- Главная строка, по которой хотим искать
- Начальная строка, на которую должна начинаться Главная строка
Функция будет возвращать логический тип.
// JavaScript | Функция проверки, что строка начинается на что-то
function does_the_string_start_with_something (mainstr, startstr) {
if(mainstr.constructor.name==‘String’ && startstr.constructor.name==‘String’){
if(mainstr.length<startstr.length){return false}
if(mainstr.match(RegExp(`^${startstr}`))){return true}else{return false}
}else{return}
}
В теле функции выполняется проверка на принадлежность обоих параметров к классу String. Если хотя бы один не String, то функция завершится без возвращаемого значения. Эта проверка защищает функцию от ошибки вычислений и падения приложения. Если будет передан, например массив, то функция не вернёт логический тип.
Также выполняется проверка длин строк. Если Главная строка короче Начальной строки, то возвращается false. По природе Главная строка не может быть короче Начальной строки.
И третья проверка — это созданное в конструкторе RegExp() — регулярное выражение. Метод match() попытается сопоставить строку mainstr по регулярному выражению. Метод match() возвращает логический тип.
Сопоставление двух строк лучше всего доверить регулярному выражению и его шаблону сопоставления.
Пример работы функции does_the_string_start_with_something()
does_the_string_start_with_something([],[]) undefined does_the_string_start_with_something('','') true does_the_string_start_with_something('qwertyasdfg','qwe') true does_the_string_start_with_something('qwertyasdfg','asd') false does_the_string_start_with_something('qwe','qwertyasdfg') false
Скриншот из браузера Google Chrome:
Дополнительный метод для класса String
Чтобы нашей функцией было удобно пользоваться, мы можем расширить стандартный набор методов для экземпляров класса String при помощи свойства prototype.
Для большего удобства назовём метод start(). В самом коде будет выглядеть короче.
// Дополнительный метод start() для класса String в JavaScript
String.prototype.start = function(startstr){
if(startstr.constructor.name==‘String’){
if(this.length<startstr.length){return false}
if(this.match(RegExp(`^${startstr}`))){return true}else{return false}
}else{return}
}
Пример работы дополнительного метода start()
'qwertyasdfg'.start('qwe') true 'qwe'.start('qwertyasdfg') false 'qwe'.start([]) undefined
Скриншот из браузера Google Chrome:
Информационные ссылки
Стандарт ECMAScript — https://tc39.es/ecma262/multipage/