Vérifiez si un texte contient une sous-chaîne
Cet outil répond directement à une question de validation courante : un texte comprend-il la sous-chaîne attendue ?
Lancer gratuitement
Il renvoie un booléen et la position, comptée à partir de zéro, de la première correspondance, ou -1 si aucune n’existe. Vous pouvez respecter exactement les majuscules et minuscules ou les ignorer. Le résultat est déterministe, facile à tester et utile dès qu’un processus nécessite une condition de recherche rapide, sans expression régulière ni rapprochement approximatif.
Recherchez une sous-chaîne avec un résultat sans ambiguïté
Placez la valeur complète dans text et la séquence recherchée dans substring. La réponse contient contains, égal à true lorsqu’une correspondance existe, ainsi que position, qui indique le début de la première occurrence. Les positions commencent à zéro : une sous-chaîne située tout au début a donc la position 0. En cas d’absence, le résultat vaut false et la position -1, ce qui distingue clairement une absence d’une occurrence initiale. Cette association convient aussi bien à une lecture humaine qu’à un logiciel appliquant une condition. L’opération recherche une sous-chaîne littérale et contiguë. Les espaces, la ponctuation et les caractères répétés sont du texte ordinaire, pas des motifs ; aucun échappement d’expression régulière n’est nécessaire. Si la même séquence apparaît plusieurs fois, seule la première position est renvoyée. Ce comportement sert particulièrement à vérifier la présence d’un marqueur attendu et à déterminer où une analyse peut commencer. Une sous-chaîne vide est refusée, car toute chaîne la contient techniquement et produirait ainsi une validation trompeuse et peu exploitable.
Déterminez si la casse doit être respectée
L’option case_sensitive vaut true par défaut. Dans ce mode, majuscules et minuscules doivent correspondre exactement : « Ready » ne correspond pas à « ready ». Cette comparaison stricte convient aux identifiants, marqueurs de protocole, références de produits et contenus dont la capitalisation est significative. Choisissez false lorsque vous souhaitez une vérification textuelle pratique qui traite ces variantes de la même façon, par exemple pour repérer un statut dans des notes saisies par un utilisateur ou vérifier qu’un titre contient une expression. Le mode insensible à la casse normalise de façon cohérente le texte source et la sous-chaîne avant de chercher la première occurrence ; la position renvoyée désigne néanmoins toujours le texte d’origine. L’outil ne supprime pas les espaces en bordure et ne modifie pas la ponctuation, qui restent donc significatifs. Il n’effectue pas non plus de neutralisation des accents, de racinisation, de translittération, de recherche approximative ou de détection de mots entiers. Ainsi, « cat » peut correspondre aux trois premières lettres de « catalog ». Ces règles limitées garantissent un résultat reproductible sans hypothèse linguistique implicite.
Exploitez la position avec précaution dans vos validations
Un processus courant envoie une valeur candidate, examine contains, puis choisit une branche sans devoir interpréter le champ numérique. Lorsqu’une correspondance existe, position peut servir au diagnostic, à un aperçu ou à une analyse ultérieure. Un contrôle d’importation peut, par exemple, confirmer qu’un en-tête comprend un jeton obligatoire et mémoriser son point de départ ; un test peut vérifier qu’un texte généré contient une formule approuvée ; un outil d’assistance peut aussi détecter un marqueur connu dans une ligne de journal collée. Considérez toujours la position comme un indice de chaîne JavaScript mesuré en unités de code UTF-16. Pour un texte latin courant, cela correspond au comptage familier des caractères, mais certains emoji et symboles Unicode occupent deux unités. L’indice natif de la plateforme est volontairement renvoyé afin que le navigateur et l’API se comportent à l’identique et que vous puissiez l’utiliser directement avec les méthodes de découpage JavaScript. Il s’agit d’une recherche littérale, pas d’un filtre de sécurité ni d’un classificateur. Validez séparément la structure des formats sensibles et utilisez un analyseur spécialisé si les limites, l’échappement ou toutes les occurrences sont importants.
Cas d’usage
Valider un texte généré
Confirmez qu’un message généré comporte une mention obligatoire ou une formule approuvée avant sa publication.
Contrôler des marqueurs d’importation
Vérifiez qu’un en-tête ou un enregistrement collé contient le jeton attendu et repérez où l’analyse peut commencer.
Tester des libellés et des statuts
Assurez-vous que la sortie d’une application comporte un libellé connu, avec ou sans respect de la casse.
Questions fréquentes
Que contient le résultat ?
Il indique si une correspondance existe, la position initiale de la première occurrence et le réglage de casse employé.
Quelle position est renvoyée en l’absence de correspondance ?
La position vaut -1 et contains vaut false. Une occurrence au tout début renvoie au contraire la position 0.
La recherche respecte-t-elle la casse par défaut ?
Oui. Choisissez false pour case_sensitive lorsque les variantes en majuscules et minuscules doivent être équivalentes.
La sous-chaîne accepte-t-elle des expressions régulières ?
Non. Elle est interprétée comme du texte littéral ; la ponctuation et les symboles n’ont aucune syntaxe de motif.
Puis-je rechercher une sous-chaîne vide ?
Non. Elle est refusée, car sa correspondance universelle est rarement utile dans une validation.
Quel est le prix d’une requête API ?
Chaque requête API coûte $0.002. La même logique déterministe peut également s’exécuter dans le navigateur.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre 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)Exemple de requête
{
"text": "Release candidate passed validation.",
"substring": "passed"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.contains",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |