Как проверить, начинается ли строка с другой строки в JavaScript?
Современный метод: String.prototype.startsWith()
Начиная с ECMAScript 6 (ES6), в JavaScript появился нативный метод startsWith(), который решает вашу задачу элегантно и читаемо. Он возвращает true, если строка начинается с указанной подстроки, и false в противном случае.
const str = "JavaScript is awesome";
console.log(str.startsWith("Java")); // true
console.log(str.startsWith("Script")); // false
console.log(str.startsWith("javascript")); // false (регистр важен)
Синтаксис и дополнительные параметры
Метод принимает два аргумента:
- searchString — подстрока, которую нужно проверить в начале строки.
- position (необязательный) — позиция в строке, с которой начинать поиск (по умолчанию 0).
// Пример с position
const email = "admin@example.com";
console.log(email.startsWith("admin")); // true
console.log(email.startsWith("admin", 0)); // true
console.log(email.startsWith("example", 5)); // true (начинается с 5-го символа)
Проверка без учёта регистра
Метод startsWith() чувствителен к регистру. Если нужно игнорировать регистр, приведите обе строки к одному регистру:
const str = "Hello World";
const prefix = "hello";
console.log(str.toLowerCase().startsWith(prefix.toLowerCase())); // true
Обработка спецсимволов
Метод корректно работает с любыми символами, включая спецсимволы, пробелы и Unicode:
const special = "Привет! $100";
console.log(special.startsWith("Привет")); // true
console.log(special.startsWith("$")); // false (не в начале)
console.log(special.startsWith("Привет! ")); // true
Альтернативные подходы (если нужно поддерживать старые браузеры)
Хотя startsWith() поддерживается во всех современных браузерах (IE не поддерживает), можно использовать полифилл или старый добрый indexOf:
// Через indexOf (как у вас)
if (str.indexOf("Java") === 0) {
// ...
}
// Через slice
if (str.slice(0, 4) === "Java") {
// ...
}
// Через регулярное выражение
if (/^Java/.test(str)) {
// ...
}
Практический пример: фильтрация email-адресов
const emails = [
"admin@site.com",
"user@site.com",
"admin@test.org",
"support@site.com"
];
const adminEmails = emails.filter(email => email.startsWith("admin"));
console.log(adminEmails); // ["admin@site.com", "admin@test.org"]
Важные замечания
- Метод
startsWith()не изменяет исходную строку. - Если передать пустую строку
"", метод вернётtrue(любая строка начинается с пустой строки). - Для проверки окончания строки используйте
endsWith().
Использование регулярных выражений для гибкой проверки
Если вам нужна более сложная логика (например, проверка с учётом регистра или с паттернами), регулярные выражения — отличный выбор. Метод test() возвращает true, если строка соответствует шаблону.
// Проверка с игнорированием регистра
const str = "Hello World";
console.log(/^hello/i.test(str)); // true (флаг i — ignore case)
// Проверка на несколько вариантов начала
const url = "https://example.com";
console.log(/^(http|https):\/\//.test(url)); // true
// Проверка на цифры в начале
const code = "123abc";
console.log(/^\d/.test(code)); // true
Сравнение с startsWith()
Регулярные выражения более мощные, но могут быть менее производительными для простых проверок. Для базовых случаев используйте startsWith() — он читаемее и быстрее. Если же вам нужно проверять сложные шаблоны (например, "начинается с буквы, затем цифры"), регекспы незаменимы.
Также помните, что для экранирования спецсимволов в регулярных выражениях нужно использовать обратную косую черту. Например, чтобы проверить начало строки с точки:
const filename = "config.json";
console.log(/^\./.test(filename)); // false (точка в регекспе — любой символ)
console.log(/^\./.test(".hidden")); // true (проверяем скрытый файл)
В большинстве реальных проектов достаточно startsWith(), но знание регулярных выражений расширяет ваши возможности.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги