Menu
Coddy logo textTech

string.find()

Часть раздела Logic & Flow путешествия по Lua на Coddy — урок 37 из 54.

Теперь, когда вы понимаете символьные классы, вы можете использовать их с string.find() для поиска шаблонов вместо точного текста. Это открывает широкие возможности для валидации и анализа текста.

Функция string.find() работает с шаблонами так же, как и с обычными строками — она возвращает позицию, в которой шаблон встречается впервые:

local text = "User123"
local position = string.find(text, "%d")
print(position)  -- Результат: 5

Это находит первую цифру в строке, которая находится на позиции 5. Вы также можете искать противоположное, используя классы символов в верхнем регистре:

local code = "ABC123"
local position = string.find(code, "%D")
print(position)  -- Вывод: 1

Здесь %D соответствует любому нецифровому символу, поэтому он находит первую букву в позиции 1.

Распространенная задача валидации — проверка того, начинается ли строка с определенного шаблона. Вы можете использовать якорь ^ в начале шаблона, чтобы поиск соответствия выполнялся только в начале строки:

local username = "player42"
local startsWithLetter = string.find(username, "^%a")

if startsWithLetter then
    print("Valid username")
else
    print("Username must start with a letter")
end

Этот шаблон проверяет, начинается ли строка с буквы, что делает его полезным для валидации ввода в тех случаях, когда требуются определенные форматы.

challenge icon

Задание

Легко

Напишите функцию startsWithLetter, которая принимает text и возвращает значение, указывающее, начинается ли строка с буквы.

Используйте string.find() с якорем ^ и символьным классом %a, чтобы проверить, начинается ли строка с буквы.

Параметры:

  • text (string): Строка для проверки

Возвращает: true, если строка начинается с буквы, иначе false (boolean)

Шпаргалка

Используйте string.find() с классами символов для поиска шаблонов в строках. Она возвращает позицию, в которой шаблон совпадает в первый раз:

local text = "User123"
local position = string.find(text, "%d")
print(position)  -- Результат: 5

Классы символов в верхнем регистре соответствуют противоположным значениям (несовпадающим символам):

local code = "ABC123"
local position = string.find(code, "%D")
print(position)  -- Результат: 1

Используйте якорь ^ в начале шаблона, чтобы поиск выполнялся только с начала строки:

local username = "player42"
local startsWithLetter = string.find(username, "^%a")

if startsWithLetter then
    print("Valid username")
else
    print("Username must start with a letter")
end

Попробуйте сами

function startsWithLetter(text)
    -- Напишите код здесь
end
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow