# Работа со строками

substring() | endswith() | startswith() | contains() | len() | concat() | splitter() | lower() | upper() | strip() | capitalize() | title() | normalizePhone() | replace() | base64() | base64decode() | urlencode() | urldecode() | hmac\_hexdigest() | select\_random() | tg\_escape()

<mark style="color:красный;">**ЛЕГЕНДА:**</mark>

<mark style="color:красный;">**!**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- Обязательные параметры</mark>

<details>

<summary>Описание</summary>

**substring(str, n1, n2)** -  для обрезки строки

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark>

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**n1**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- количество символов для обрезки слева</mark> (> 0)

**n2** - количество символов для обрезки справа (< 0)

**endswith(str, substr)** - для проверки, заканчивается ли строка указанной подстрокой

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark> - «что искать»

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**substr**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- строка поиска</mark> - «что искать»

**startswith(str, substr)** - для проверки, начинается ли строка с указанной подстроки

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark> - «что искать»

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**substr**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- строка поиска</mark> - «что искать»

**contains(str, substr,registr)** – для проверки, содержит ли первая строка вторую строку

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark> - «что искать»

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**substr**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- строка поиска</mark> - «что искать»

**registr** - флаг, указывающий, нужно ли учитывать регистр (False означает, что регистр учитывать не нужно)

**len(str)** – для подсчёта количества символов в строке.

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark>

**concat(str1, str2)** – для объединения (склеивания) строк, переданных в качестве параметров

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str1**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- строка 1</mark>

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str2**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- строка 2</mark>

**splitter(str, s, n)** -  для разделения строки на части. Функция возвращает массив элементов

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark>

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**s**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- разделитель строки</mark>

**n** - максимальное количество элементов

**lower(str)** – для преобразования строки в нижний регистр

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark>

**upper(str)** -  для преобразования строки в верхний регистр

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark>

**strip(str)** -  для удаления пробелов с обоих концов строки

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark>

**capitalize(str)** -  для замены первого символа строки на его заглавный эквивалент (делает первую букву слова заглавной).

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark>

**title(str)** - для преобразования каждого слова в строке str так, чтобы первая буква была заглавной, а остальные — строчными

**normalizePhone(str)** -  для форматирования номера телефона в стандартный вид: удаляет все нецифровые символы и заменяет начальную цифру 8 на 7, если она присутствует

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка с номером телефона</mark>

**replace(str, s1, s2, n)** -  для замены подстроки в строке на другую подстроку

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark>

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**s1**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- подстрока, которую нужно заменить</mark>

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**s2**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- подстрока, на которую нужно заменить</mark>

**n** - количество замен

\
**base64(str)** – для кодирования строки в формат base64

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark>

**base64decode(str)** -  для декодирования base64 обратно в строку

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark>

**urlencode(str) -** для кодирования строки, чтобы сделать её безопасной для передачи по HTTP

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark>

Например: *John Smith* преобразуется в *John%20Smith*, а *Anna\&Maria* преобразуется в *Anna%26Maria*

**urldecode(str)** - для декодирования URL-кодированной строки

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark>

Например: John%20Smith будет преобразовано в John Smith

**hmac\_hexdigest(secret\_key, msg, hash\_type)** - для хеширования строки с использованием 'sha256', 'md5', 'sha512' или 'sha1'

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**secret\_key**</mark> - ключ\ <mark style="color:красный;">**!**</mark>  <mark style="color:красный;">**msg**</mark> - строка для хеширования\ <mark style="color:красный;">**!**</mark>  <mark style="color:красный;">**hash\_type**</mark> - тип хеша ('sha256', 'md5', 'sha512' или 'sha1')

**select\_random(str, s) -** для выбора случайного элемента из строки с разделителями. Первый параметр — строка с элементами, второй — разделитель. Для второго параметра по умолчанию используется '|'.

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark>

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**s**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">-</mark> разделитель строки (по умолчанию '|')

Пример использования:&#x20;`select_random('first element | second element | another element | and another one')`

**tg\_escape(str)** - для экранирования переменной и отображения её в сообщении Telegram с включённой разметкой. Функция добавляет обратную косую черту перед следующими символами:&#x20;'\_', '\*', '\[', ']', '(', ')', '\~', '', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!'

Параметры:

<mark style="color:красный;">**!**</mark> <mark style="color:красный;">**str**</mark> <mark style="color:красный;"></mark><mark style="color:красный;">- исходная строка</mark>

</details>

<details>

<summary>Примеры</summary>

Давайте разберём функцию обрезки строки:

<div data-with-frame="true"><figure><img src="/files/08ecaef97b7da6088fb87964348c184179349a24" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/c0a9af2a9732f75dfdaafff55b17eb19f1be44bf" alt="" width="375"><figcaption></figcaption></figure></div>

Определение длины строки:

<div data-with-frame="true"><figure><img src="/files/6a5aac1e6ab88b11950d604488d2b5e97332e0a6" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/2fb785b82989350b7e537a22a1e4348bb5584b62" alt="" width="375"><figcaption></figcaption></figure></div>

Функция, которая разделяет строку на части, часто нужна при работе с таблицами:

<div data-full-width="true" data-with-frame="true"><figure><img src="/files/c853f569d1bc17bd55a0f4b11fdedd3b29a9a29d" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-full-width="true" data-with-frame="true"><figure><img src="/files/72c33ac661b4fa875d3e617abc7fd765e51660ea" alt="" width="375"><figcaption></figcaption></figure></div>

Обработка номера телефона:

<div data-with-frame="true"><figure><img src="/files/8b3981ff3b592cdef2e70ebfc714017fa2fd545f" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/96baa4e93cbc50bb4a6751e89fc6f18b685a8022" alt="" width="375"><figcaption></figcaption></figure></div>

Замена подстроки в строке:

<div data-full-width="true" data-with-frame="true"><figure><img src="/files/3fedb6c6081469d349b013a22a4ac6495c7205ec" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-full-width="true" data-with-frame="true"><figure><img src="/files/6a56884f5ef289f673db143023e5cb1cd7916280" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

<pre><code><strong>/*Анализ substring()*/
</strong>text = 'text for trimming'
a=substring(text, 4)
a1=substring(text, -4)
b=substring(text, 4, 6)
b1=substring(text, 0, 6)
c=substring(text, 0, -4)
d=substring(text, 4, -4)

/*работа с len()*/
text = 'text to be trimmed'
a=len(text)
b=len("what a wonderful world!")

/*разбить строку на части*/
elements = splitter('s, W, q', ',')
text='text1:text2:text3:text4:text5'
texts = splitter(text, ':',2)

/*title()*/
full name = John Smith
full name = title("#{full name}")

/*обработка номера телефона*/
phone = normalizePhone("+971 50 123 4567")

/*замена подстроки в строке*/
a=replace("wwww2222ww", "w", "e", 1)


</code></pre>

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mavibot.ai/doc/ru/chatbot/functions/kalkulyator/strings.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
