# Trabajar con cadenas

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:rojo;">**LEYENDA:**</mark>

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- Parámetros obligatorios</mark>

<details>

<summary>Descripción</summary>

**substring(str, n1, n2)** - para recortar una cadena

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark>

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**n1**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- número de caracteres a recortar por la izquierda</mark> (> 0)

**n2** - número de caracteres a recortar por la derecha (< 0)

**endswith(str, substr)** - para comprobar si la cadena termina con la subcadena dada

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark> - "dónde buscar"

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**substr**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena de búsqueda</mark> - "qué buscar"

**startswith(str, substr)** - para comprobar si la cadena comienza con la subcadena dada

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark> - "dónde buscar"

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**substr**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena de búsqueda</mark> - "qué buscar"

**contains(str, substr,registr)** – para comprobar si la primera cadena contiene la segunda cadena

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark> - "dónde buscar"

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**substr**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena de búsqueda</mark> - "qué buscar"

**registr** - una marca que indica si se debe considerar la distinción entre mayúsculas y minúsculas (False significa que no debe considerarse)

**len(str)** – para contar el número de caracteres en una cadena.

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark>

**concat(str1, str2)** – para concatenar (unir) las cadenas pasadas como parámetros

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str1**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena 1</mark>

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str2**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena 2</mark>

**splitter(str, s, n)** - para dividir una cadena en partes. La función devuelve un array de elementos

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark>

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**s**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- delimitador de cadena</mark>

**n** - número máximo de elementos

**lower(str)** – para convertir una cadena a minúsculas

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark>

**upper(str)** - para convertir una cadena a mayúsculas

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark>

**strip(str)** - para eliminar espacios en blanco de ambos extremos de una cadena

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark>

**capitalize(str)** - para reemplazar el primer carácter de una cadena por su equivalente en mayúscula (pone en mayúscula la primera letra de la palabra).

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark>

**title(str)** - para convertir cada palabra de la cadena str de modo que la primera letra sea mayúscula y las demás minúsculas

**normalizePhone(str)** - para formatear un número de teléfono a un formato estándar: elimina todos los caracteres que no sean dígitos y reemplaza el dígito inicial 8 por 7 si está presente

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original con un número de teléfono</mark>

**replace(str, s1, s2, n)** - para reemplazar una subcadena en una cadena por otra subcadena

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark>

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**s1**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- subcadena a reemplazar</mark>

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**s2**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- subcadena por la que reemplazar</mark>

**n** - número de reemplazos

\
**base64(str)** – para codificar una cadena en formato base64

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark>

**base64decode(str)** - para decodificar base64 y convertirlo de nuevo en una cadena

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark>

**urlencode(str) -** para codificar una cadena y hacerla segura para la transmisión HTTP

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark>

Por ejemplo: *John Smith* se convierte en *John%20Smith*, y *Anna\&Maria* se convierte en *Anna%26Maria*

**urldecode(str)** - para decodificar una cadena codificada en URL

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark>

Por ejemplo: John%20Smith se traducirá como John Smith

**hmac\_hexdigest(secret\_key, msg, hash\_type)** - para hashear una cadena usando 'sha256', 'md5', 'sha512' o 'sha1'

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**secret\_key**</mark> - clave\ <mark style="color:rojo;">**!**</mark>  <mark style="color:rojo;">**msg**</mark> - cadena a hashear\ <mark style="color:rojo;">**!**</mark>  <mark style="color:rojo;">**hash\_type**</mark> - tipo de hash ( 'sha256', 'md5', 'sha512' o 'sha1')

**select\_random(str, s) -** para seleccionar un elemento aleatorio de una cadena delimitada. El primer parámetro es la cadena con elementos, el segundo es el delimitador. El segundo parámetro por defecto es '|'.

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark>

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**s**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">-</mark> delimitador de cadena (el valor predeterminado es '|')

Ejemplo de uso:&#x20;`select_random('primer elemento | segundo elemento | otro elemento | y otro más')`

**tg\_escape(str)** - para escapar una variable y mostrarla en un mensaje de Telegram con marcado habilitado. La función añade una barra invertida antes de los siguientes caracteres:&#x20;'\_', '\*', '\[', ']', '(', ')', '\~', '', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!'

Parámetros:

<mark style="color:rojo;">**!**</mark> <mark style="color:rojo;">**str**</mark> <mark style="color:rojo;"></mark><mark style="color:rojo;">- cadena original</mark>

</details>

<details>

<summary>Ejemplos</summary>

Analicemos la función de recorte de cadenas:

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

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

Determinación de la longitud de la cadena:

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

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

Una función que divide una cadena en partes suele ser necesaria al trabajar con tablas:

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

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

Procesamiento de números de teléfono:

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

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

Reemplazo de una subcadena en una cadena:

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

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

</details>

<details>

<summary>Ejemplo de código para copiar</summary>

<pre><code><strong>/*Analizando substring()*/
</strong>text = 'texto para recortar'
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)

/*trabajando con len()*/
text = 'texto a recortar'
a=len(text)
b=len("¡qué mundo tan maravilloso!")

/*dividir la cadena en partes*/
elements = splitter('s, W, q', ',')
text='texto1:texto2:texto3:texto4:texto5'
texts = splitter(text, ':',2)

/*title()*/
nombre completo = John Smith
nombre completo = title("#{nombre completo}")

/*procesamiento de número de teléfono*/
phone = normalizePhone("+971 50 123 4567")

/*reemplazo de subcadena en una cadena*/
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/es/chatbot/functions/calculadora/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.
