Compruebe si un texto contiene una subcadena
Este comprobador responde de forma directa a una pregunta habitual de validación: ¿incluye un texto la subcadena que usted espera?
Ejecutar — gratis
Devuelve un resultado booleano y la posición, comenzando desde cero, de la primera coincidencia, o -1 si no existe ninguna. Puede conservar la distinción exacta entre mayúsculas y minúsculas o ignorarla. El resultado es determinista, fácil de probar y útil cuando un flujo necesita una condición de búsqueda rápida sin expresiones regulares ni coincidencias aproximadas.
Compruebe una subcadena con un resultado inequívoco
Introduzca el valor completo en text y la secuencia que desea localizar en substring. La respuesta incluye contains, que vale true cuando existe una coincidencia, y position, que indica dónde comienza la primera. Las posiciones empiezan en cero, de modo que una subcadena situada al principio devuelve la posición 0. Si no aparece, el resultado es false y la posición es -1; así se distingue claramente la ausencia de una coincidencia al inicio. Esta combinación resulta cómoda tanto para una persona como para el software que aplica una condición. La operación busca una subcadena literal y contigua. Los espacios, la puntuación y los caracteres repetidos se tratan como texto normal, no como patrones, por lo que no hace falta escapar símbolos de expresiones regulares. Si la subcadena aparece varias veces, solo se informa de la primera posición. Es especialmente útil para validar si aparece un marcador esperado y determinar dónde podría empezar un análisis posterior. Se rechaza una subcadena vacía porque, técnicamente, cualquier cadena la contiene y ese resultado sería confuso y poco útil.
Decida si deben distinguirse mayúsculas y minúsculas
La opción case_sensitive tiene el valor true de forma predeterminada. En ese modo, las letras mayúsculas y minúsculas deben coincidir exactamente: buscar «Ready» no encuentra «ready». La comparación exacta es apropiada para identificadores, marcadores de protocolos, códigos de productos y cualquier contenido donde el uso de mayúsculas tenga significado. Establezca la opción en false cuando prefiera una comprobación práctica que trate esas variantes como equivalentes, por ejemplo para localizar una palabra de estado en notas introducidas por usuarios o verificar que un encabezado contiene una frase. El modo que no distingue mayúsculas normaliza de forma coherente el texto y la subcadena antes de buscar, aunque la posición informada sigue perteneciendo al texto original. La capacidad no elimina espacios de los extremos ni modifica la puntuación, por lo que ambos siguen siendo significativos. Tampoco aplica equivalencia de acentos, lematización, transliteración, coincidencia aproximada ni detección de palabras completas. Por ejemplo, «cat» puede coincidir con las tres primeras letras de «catalog». Estas reglas limitadas mantienen el resultado reproducible y evitan suposiciones lingüísticas silenciosas.
Utilice la posición de forma segura en sus validaciones
Un flujo habitual envía un valor candidato, comprueba contains y decide la siguiente acción sin tener que interpretar el campo numérico. Cuando existe una coincidencia, position puede servir para diagnósticos, vistas previas o un paso de análisis posterior. Por ejemplo, una importación puede confirmar que un encabezado incluye un elemento obligatorio y registrar dónde empieza; una prueba puede verificar que un texto generado incorpora una frase aprobada; o una herramienta de soporte puede detectar un marcador conocido en una línea de registro pegada. Interprete siempre la posición como un índice de cadena de JavaScript, medido en unidades de código UTF-16. En textos latinos corrientes coincide con el recuento habitual de caracteres, pero algunos emoji y símbolos Unicode menos comunes ocupan dos unidades. Se devuelve deliberadamente el índice nativo de la plataforma para que el navegador y la API se comporten igual y usted pueda emplearlo directamente con los métodos de corte de JavaScript. Esta es una búsqueda literal, no un saneador de seguridad ni un clasificador. Valide la estructura por separado para formatos sensibles y utilice un analizador específico cuando importen los límites, las reglas de escape o todas las coincidencias.
Qué puede hacer con ella
Validar texto generado
Confirme que un mensaje generado incluye un aviso obligatorio o una frase aprobada antes de publicarlo.
Comprobar marcadores de importación
Verifique que un encabezado o registro pegado contiene el elemento esperado e indique dónde puede comenzar el análisis.
Probar etiquetas y mensajes de estado
Compruebe que la salida de una aplicación contiene una etiqueta conocida, con distinción de mayúsculas o sin ella.
Preguntas frecuentes
¿Qué contiene el resultado?
Devuelve si existe una coincidencia, la posición desde cero de la primera y la configuración de mayúsculas utilizada.
¿Qué posición se devuelve si no hay coincidencia?
La posición es -1 y contains vale false. Una coincidencia al principio devuelve, en cambio, la posición 0.
¿La comparación distingue mayúsculas de forma predeterminada?
Sí. Establezca case_sensitive en false cuando las variantes en mayúsculas y minúsculas deban considerarse iguales.
¿La subcadena admite expresiones regulares?
No. Se interpreta como texto literal, por lo que la puntuación y los símbolos no tienen sintaxis de patrón.
¿Puedo buscar una subcadena vacía?
No. Las subcadenas vacías se rechazan porque su coincidencia universal rara vez resulta útil para validar.
¿Cuánto cuesta una solicitud API?
Cada solicitud API cuesta $0.002. La misma lógica determinista también puede ejecutarse en el navegador.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/str/contains \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Release candidate passed validation.","substring":"passed"}'const res = await fetch("https://api.kit.forhosting.com/str/contains", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Release candidate passed validation.",
"substring": "passed"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/contains",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Release candidate passed validation.",
"substring": "passed"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/contains", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Release candidate passed validation.","substring":"passed"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Release candidate passed validation.","substring":"passed"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/contains", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "Release candidate passed validation.",
"substring": "passed"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.contains",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |