Validatore di parentesi bilanciate
Il validatore di parentesi bilanciate controlla parentesi tonde, quadre e graffe nel codice o nel testo con un’unica scansione deterministica.
Esegui gratis nel browser
Verifica che ogni apertura abbia la chiusura corretta e che l’ordine di annidamento sia rispettato. Se l’input non è valido, il risultato individua la prima discordanza rilevabile e indica la posizione a base zero, il carattere trovato e quello atteso. Può quindi usarlo per controlli manuali, integrazioni negli editor, procedure di build, esercizi didattici e pipeline di convalida leggere senza ricorrere a un parser specifico per un linguaggio.
Comprenda che cosa viene controllato
Il validatore considera le tre famiglie di delimitatori più comuni nel codice sorgente e nel testo strutturato: parentesi tonde, quadre e graffe. Perché un input sia valido, ogni carattere di apertura deve essere chiuso da un carattere della stessa famiglia e le chiusure devono seguire l’ordine inverso delle aperture. Per esempio, <code>({[]})</code> è bilanciato perché ogni coppia interna si chiude prima del proprio contenitore; <code>([)]</code> non lo è, poiché la parentesi tonda si chiude mentre quella quadra è ancora aperta. I caratteri diversi da questi sei simboli non cambiano il risultato. Lei può quindi incollare una funzione, un frammento di configurazione, un’espressione matematica, un brano di prosa o un esempio su più righe. Il controllo è lessicale e non dipende dal linguaggio: vengono contate anche le parentesi nelle stringhe tra virgolette o nei commenti. Questa regola prevedibile funziona con molti linguaggi, ma non sostituisce un parser JavaScript, Python, JSON o un compilatore quando le parentesi in stringhe e commenti devono essere ignorate.
Interpreti posizioni e diagnostica
Quando una parentesi di chiusura non corrisponde all’apertura più recente, la convalida si interrompe subito e segnala quel carattere come prima discordanza rilevata. La risposta contiene <code>balanced: false</code>, una <code>position</code> a base zero, il carattere <code>found</code> e quello <code>expected</code>. In un annidamento errato come <code>{[}</code>, la graffa chiusa viene segnalata alla posizione due, perché in quel punto era richiesta una parentesi quadra chiusa. La risposta include anche la posizione dell’apertura che ha determinato tale attesa. Se una chiusura compare senza alcuna apertura disponibile, il valore atteso spiega che occorreva un carattere di apertura. Un’apertura rimasta sola può essere riconosciuta soltanto al termine della scansione; in quel caso il risultato indica l’apertura non chiusa più recente e il carattere necessario. Viene usata l’indicizzazione delle stringhe JavaScript, quindi le posizioni sono offset di unità di codice UTF-16; nel normale codice ASCII coincidono con le posizioni mostrate dalla maggior parte degli editor.
Lo usi nelle automazioni e nelle revisioni
Per un controllo interattivo, incolli codice o testo nell’esecutore del browser e consulti la risposta strutturata. L’API usa lo stesso risolutore deterministico, quindi un’automazione riceve la medesima decisione e gli stessi campi diagnostici dell’esecuzione manuale. Un hook pre-commit può rifiutare frammenti generati quando <code>balanced</code> è false; una pipeline di documentazione può intercettare esempi malformati prima della pubblicazione; un’applicazione didattica può usare il carattere previsto e la posizione esatta per offrire indicazioni mirate. Ogni richiesta API costa $0.002; non è prevista una tariffa variabile per carattere. La convalida richiede tempo lineare perché ogni carattere viene visitato una volta, mentre uno stack conserva soltanto le aperture non ancora chiuse. Lo strumento non riscrive, ripara, formatta, esegue né valuta il contenuto inviato. Consideri la risposta un segnale preciso sulla struttura delle parentesi e la abbini a un parser o linter quando occorre verificare anche grammatica, stringhe, commenti o altri errori sintattici.
Casi d'uso
Controlli il codice generato prima di salvarlo
Rifiuti un frammento generato se l’annidamento è incompleto o una chiusura appartiene alla coppia sbagliata.
Fornisca indicazioni precise agli studenti
Mostri la posizione a base zero e il carattere atteso, invece di limitarsi a dire che l’espressione non è valida.
Convalidi gli esempi della documentazione
Esamini i campioni di codice nella pipeline editoriale e segnali strutture errate prima che raggiungano i lettori.
Domande frequenti
Quali caratteri vengono controllati?
Il validatore controlla parentesi tonde (), quadre [] e graffe {}. Tutti gli altri caratteri vengono ignorati.
Le posizioni partono da zero?
Sì. La posizione zero è la prima unità di codice UTF-16 della stringa, secondo l’indicizzazione JavaScript.
Le parentesi in stringhe o commenti vengono ignorate?
No. È un controllo lessicale indipendente dal linguaggio, quindi ogni parentesi viene contata ovunque compaia.
Che cosa accade se un’apertura non viene mai chiusa?
Dopo la scansione completa, il risultato indica l’apertura non chiusa più recente e il carattere necessario per chiuderla.
Quanto costa una richiesta API?
Ogni richiesta API costa $0.002. L’esecutore del browser svolge localmente lo stesso controllo deterministico.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo 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)Esempio di richiesta
{
"text": "function demo(items) { return items[0]; }"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.balanced_brackets",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |