Validateur de parenthèses équilibrées
Le validateur de parenthèses équilibrées contrôle les parenthèses, crochets et accolades d’un code ou d’un texte en un seul parcours déterministe.
Lancer gratuitement
Il confirme que chaque signe ouvrant possède le bon signe fermant et que l’ordre d’imbrication est respecté. Si l’entrée est incorrecte, le résultat indique la première anomalie détectable, sa position comptée à partir de zéro, le caractère trouvé et celui qui était attendu. Cet outil convient aux contrôles manuels, aux éditeurs, aux scripts de build, aux exercices pédagogiques et aux chaînes de validation légères, sans analyseur propre à un langage.
Comprenez la portée du contrôle
Ce validateur traite les trois familles de délimiteurs les plus courantes dans le code source et les textes structurés : parenthèses, crochets et accolades. Pour qu’une entrée soit valide, chaque signe ouvrant doit être fermé par un signe de la même famille, et les fermetures doivent suivre l’ordre inverse des ouvertures. Ainsi, <code>({[]})</code> est équilibré puisque chaque paire intérieure se ferme avant son conteneur, tandis que <code>([)]</code> ne l’est pas : la parenthèse se ferme alors que le crochet reste ouvert. Les caractères autres que ces six signes n’influencent pas le résultat. Vous pouvez donc coller une fonction, un extrait de configuration, une expression mathématique, un passage en prose ou un exemple multiligne. Le contrôle est lexical et indépendant du langage : un signe placé dans une chaîne entre guillemets ou un commentaire est également compté. Cette règle prévisible fonctionne avec de nombreux langages, mais ne remplace pas un analyseur JavaScript, Python, JSON ou un compilateur lorsque les signes présents dans les chaînes et commentaires doivent être ignorés.
Interprétez les positions et le diagnostic
Lorsqu’un signe fermant ne correspond pas au dernier signe ouvert, la validation s’arrête immédiatement et signale cette fermeture comme première anomalie détectée. La réponse contient <code>balanced: false</code>, une <code>position</code> comptée à partir de zéro, le caractère <code>found</code> et le caractère <code>expected</code>. Dans une imbrication incorrecte telle que <code>{[}</code>, l’accolade fermante est signalée en position deux, car un crochet fermant était requis. La réponse fournit aussi la position du signe ouvrant qui détermine cette attente. Si une fermeture apparaît alors qu’aucune ouverture n’est disponible, la valeur attendue précise qu’un signe ouvrant était nécessaire. Une ouverture restée seule ne peut être reconnue qu’à la fin du parcours ; le résultat désigne alors le signe non fermé le plus récent et la fermeture requise. L’indexation des chaînes JavaScript est utilisée : les positions sont donc des décalages en unités de code UTF-16. Pour du code ASCII ordinaire, elles correspondent aux positions de caractères affichées par la plupart des éditeurs.
Intégrez-le à vos automatisations et revues
Pour un contrôle interactif, collez votre code ou votre texte dans l’exécuteur du navigateur, puis consultez la réponse structurée. L’API emploie exactement le même solveur déterministe : une automatisation reçoit donc la même décision et les mêmes champs de diagnostic qu’une exécution manuelle. Un hook de pré-commit peut refuser un extrait généré lorsque <code>balanced</code> vaut false, une chaîne documentaire peut repérer les exemples mal formés avant leur publication, et une application pédagogique peut exploiter le caractère attendu et la position exacte afin de fournir une aide ciblée. Une requête API coûte $0.002 ; aucun tarif variable par caractère n’est déclaré. Le temps de validation est linéaire, car chaque caractère n’est visité qu’une fois, tandis qu’une pile ne conserve que les ouvertures encore actives. Le validateur ne réécrit, ne répare, ne formate, n’exécute et n’évalue pas le contenu transmis. Associez ce signal structurel précis à un analyseur ou à un linter si vous devez aussi contrôler la grammaire, les chaînes, les commentaires ou d’autres erreurs syntaxiques.
Cas d’usage
Contrôlez le code généré avant l’enregistrement
Refusez un extrait généré si son imbrication est incomplète ou si une fermeture appartient à la mauvaise paire.
Donnez un retour précis aux apprenants
Affichez la position comptée à partir de zéro et le caractère attendu au lieu d’indiquer seulement que l’expression est incorrecte.
Validez les exemples de documentation
Analysez les extraits dans votre chaîne de publication et signalez les structures incorrectes avant leur lecture.
Questions fréquentes
Quels caractères sont contrôlés ?
Le validateur contrôle les parenthèses (), les crochets [] et les accolades {}. Tous les autres caractères sont ignorés.
Les positions commencent-elles à zéro ?
Oui. La position zéro est la première unité de code UTF-16 de la chaîne, conformément à l’indexation JavaScript.
Les signes dans les chaînes ou commentaires sont-ils ignorés ?
Non. Ce contrôle lexical est indépendant du langage et compte chaque signe, quel que soit son emplacement.
Que se passe-t-il si une ouverture n’est jamais fermée ?
Après le parcours complet, le résultat identifie le signe non fermé le plus récent et le caractère nécessaire pour le fermer.
Quel est le prix d’une requête API ?
Chaque requête API coûte $0.002. L’exécuteur du navigateur réalise localement le même contrôle déterministe.
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/dev/balanced-brackets \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"function demo(items) { return items[0]; }"}'const res = await fetch("https://api.kit.forhosting.com/dev/balanced-brackets", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "function demo(items) { return items[0]; }"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/balanced-brackets",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "function demo(items) { return items[0]; }"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/balanced-brackets", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"function demo(items) { return items[0]; }"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"function demo(items) { return items[0]; }"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/balanced-brackets", 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": "function demo(items) { return items[0]; }"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.balanced_brackets",
"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. |