> For the complete documentation index, see [llms.txt](https://docs.opencityitalia.it/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.opencityitalia.it/stanza-del-cittadino/guida-alla-creazione-dei-servizi-digitali/creare-un-servizio/le-funzioni/validazione-dei-dati.md).

# Validazione dei dati

La piattaforma permette funzioni di validazione dei dati

## Obbligatorietà dei contenuti

Per rendere la compilazione di un campo obbligatoria, attiva la funzione "required" nella sezione "Validation"

<figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2FFC6vfZ5Nahnfzw4cKvMJ%2Fimage.png?alt=media&amp;token=1d205cbb-e50e-4942-af6d-15d0b619f419" alt=""><figcaption></figcaption></figure>

## Dato presente una sola volta nel modulo

Per far sì che un dato possa essere inserito solo una volta durante la compilazione, nella sezione "Validation" del componente attiva la funzione "unique"

<figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2FG1iZb9VpQtkXoRuUR4Zf%2Fimage.png?alt=media&amp;token=21533822-004b-4da7-92a9-f87a0483594d" alt=""><figcaption></figcaption></figure>

## Lunghezza minima e massima (datagrid)

Per i componenti [Datagrid](/stanza-del-cittadino/guida-alla-creazione-dei-servizi-digitali/creare-un-servizio/i-componenti/il-datagrid.md) puoi configurare la lunghezza minima e massima del testo inserito nel campo.

Nella sezione "Validation" del componente, compila le voci *Maximum length* e *Minimum length* con valori numerici.

<figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2FXAX9bLpL7tuh8yD867Wn%2Fimage.png?alt=media&amp;token=4faee283-9723-424a-9f5b-b966cd96997c" alt=""><figcaption></figcaption></figure>

Ricordati di inserire il messaggio di errore che compare all'utente alla voce "Custom error message".

<figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2FkFvCFRC4jupqvKB1i5mE%2Fimage.png?alt=media&amp;token=512d7df4-178b-4c9f-a6f1-f1721f4feb58" alt=""><figcaption></figcaption></figure>

## Verificare le date inserite

Una volta inserita la data, puoi [configurare il formato e verificare che il cittadino non possa inserire date nel passato](/stanza-del-cittadino/guida-alla-creazione-dei-servizi-digitali/creare-un-servizio/i-componenti/le-date.md#configurare-le-date).

<div data-full-width="true"><figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2FpVawhlvXYhTBBhkckwhD%2Fimage.png?alt=media&amp;token=1164629a-e87a-4e39-a736-d350cec2563d" alt=""><figcaption></figcaption></figure> <figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2FJwSrHHNCVhTwYVVLuKni%2FScreenshot-4--05-21-2025_04_37_PM.png?alt=media&amp;token=8fc5607e-8512-43cb-855b-632b0b198be1" alt=""><figcaption></figcaption></figure></div>

## Verificare l'età di una persona

Durante la configurazione di una [data](/stanza-del-cittadino/guida-alla-creazione-dei-servizi-digitali/creare-un-servizio/i-componenti/le-date.md), nel caso in cui il servizio preveda l'inserimento di una data di nascita, puoi controllare che questa venga inserita correttamente.

Nella sezione "Validation" del componente, compila la voce "Custom validation" con il codice JavaScript di verifica, ad esempio prevedendo che venga inserita la data di nascita di un minorenne

```javascript
date = moment(input, 'DD/MM/YYYY')
if (date.isAfter(moment())) {
  valid = "La data non può essere nel futuro"
} else {
  if (moment().diff(date, 'years') > 18) {
    valid = "L'età inserità non è quella di un minorenne"
  }
}
```

## *Regular expression pattern*

Il *pattern* è una stringa che rappresenta una espressione regolare usata per verificare se il valore inserito in un campo rispetta certe regole di formato. È un modo per assicurarsi che, ad esempio, un campo email, telefono o codice postale abbia la struttura corretta.

Nella sezione "Validation" del componente (normalmente un [*Text field*](/stanza-del-cittadino/guida-alla-creazione-dei-servizi-digitali/creare-un-servizio/i-componenti/il-textfield.md)), compila la voce "Regular expression pattern" con la struttura prevista dal dato inserito

<figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2Fn9diKz5ezmEOCkU7gK24%2Fimage.png?alt=media&amp;token=44d776cb-91d1-4a1d-9ba2-1d415ec16945" alt=""><figcaption></figcaption></figure>

Ricordati di inserire il messaggio di errore che compare all'utente alla voce "Custom error message".

<figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2FCVOZ50GAVM26dlrqoRVh%2Fimage.png?alt=media&amp;token=178a3630-8bff-4531-b74b-f9a77b9afb39" alt=""><figcaption></figcaption></figure>

#### Esempi di pattern per casi d'uso comuni

Ogni servizio richiede formati diversi. Qui trovi alcuni pattern già pronti per i dati più frequenti nei moduli della Pubblica Amministrazione.

| Caso d'uso     | Regular expression pattern                                               | Cosa verifica                                                                                                                               |
| -------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Codice fiscale | `^[A-Za-z]{6}[0-9]{2}[A-Za-z]{1}[0-9]{2}[A-Za-z]{1}[0-9]{3}[A-Za-z]{1}$` | 16 caratteri nel formato standard: 6 lettere, 2 cifre, 1 lettera, 2 cifre, 1 lettera, 3 cifre, 1 lettera.                                   |
| Partita IVA    | `^[0-9]{11}$`                                                            | 11 cifre numeriche, senza lettere né spazi.                                                                                                 |
| IBAN italiano  | `^IT[0-9]{2}[A-Za-z][0-9]{10}[A-Za-z0-9]{12}$`                           | 27 caratteri: prefisso "IT", 2 cifre di controllo, 1 lettera (CIN), 10 cifre (ABI e CAB), 12 caratteri alfanumerici per il numero di conto. |
| CAP            | `^[0-9]{5}$`                                                             | 5 cifre numeriche.                                                                                                                          |

**Come leggere un pattern:**

* `^` e `$` indicano l'inizio e la fine del testo: il valore inserito deve corrispondere per intero, non solo in parte;
* `[A-Za-z]` indica una lettera, maiuscola o minuscola;
* `[0-9]` indica una cifra numerica;
* `{n}` indica quante volte si ripete il carattere o il gruppo precedente;
* `[A-Za-z0-9]` indica un carattere alfanumerico, lettera o cifra.

## Lunghezza minima e massima del dato

Durante la configurazione di un componente [*Text field*](/stanza-del-cittadino/guida-alla-creazione-dei-servizi-digitali/creare-un-servizio/i-componenti/il-textfield.md), puoi configurare:

* la lunghezza del testo (1)
* il numero di parole (2).

<figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2FSHbAA7b5WELmDut29U9D%2Fimage.png?alt=media&amp;token=78069bbf-11ac-4b4d-bc3c-55275a209472" alt=""><figcaption></figcaption></figure>

Ricordati di inserire il messaggio di errore che compare all'utente alla voce "Custom error message".

<figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2FpOCtFEobZepTICl1mkyV%2Fimage.png?alt=media&amp;token=6fa5f2d3-352c-455e-bf5d-25f5adf67068" alt=""><figcaption></figcaption></figure>

## Verificare la provincia del richiedente

Per verificare l'indirizzo inserito da un utente in fase di richiesta, inserisci nel modulo un [nested form OC-Residenza](/stanza-del-cittadino/guida-alla-creazione-dei-servizi-digitali/creare-un-servizio/i-componenti/i-nested-form.md).

Successivamente, inserisci un campo Columns in cui inserire un [campo HTML ](/stanza-del-cittadino/guida-alla-creazione-dei-servizi-digitali/creare-un-servizio/i-componenti/lhtml.md)e un checkbox [obbligatorio](#obbligatorieta-dei-contenuti) e disabilitato.

<figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2Fvgvbfc9pREluBWRXnCYB%2FScreen%20recording%202025-05-22%2016.52.20.gif?alt=media&amp;token=4a027703-30ad-4868-9904-3a03555587ab" alt=""><figcaption></figcaption></figure>

Nella sezione "Contional" del campo Columns compila la voce "Advanced conditions" con il codice di controllo:

<div><figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2Fxw1rZBEKN7N561vX1tpj%2Fimage.png?alt=media&amp;token=1f31b590-e392-4457-b05c-6a02ce1a50df" alt=""><figcaption></figcaption></figure> <figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2F2GsRCNCqUOHtC6TBPAWl%2FScreenshot%20(16).png?alt=media&amp;token=b9845435-ccac-4e3b-8d90-80e57b913feb" alt=""><figcaption></figcaption></figure></div>

Qui trovi un codice di esempio per cui il richiedente viene bloccato quando la provincia inserita non è quella di Trento:

```
show = 
  data.sport_organization_address?.data.county?.length > 0 &&
  data.sport_organization_address.data.county !== "TN"
```

## Verificare l'ISEE del richiedente

Per verificare il valore ISEE inserito da un utente in fase di richiesta, inserisci nel modulo [un nested form OC-ISEE](/stanza-del-cittadino/guida-alla-creazione-dei-servizi-digitali/creare-un-servizio/i-componenti/i-nested-form.md).

Successivamente, inserisci un campo Columns in cui inserire un [campo HTML](/stanza-del-cittadino/guida-alla-creazione-dei-servizi-digitali/creare-un-servizio/i-componenti/lhtml.md) e un checkbox [obbligatorio](#obbligatorieta-dei-contenuti) e disabilitato.

<figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2FrEbsQFwHglY7XUyUd5Ee%2FScreen%20recording%202025-05-22%2017.08.08.gif?alt=media&amp;token=792e7cc8-610a-4ef9-a1dc-27cea673f1ac" alt=""><figcaption></figcaption></figure>

Una volta fatto, configura il codice json del componente Columns con il codice di controllo.

<figure><img src="https://4252442743-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrdV0mwA7iy2c3I7wu5BX%2Fuploads%2FWiDtZhx7kqTr6wP21TbG%2Fimage.png?alt=media&amp;token=240382d0-c935-46dc-b03b-7f8c70ed3e6f" alt=""><figcaption></figcaption></figure>

Qui trovi un codice di esempio per cui il richiedente viene bloccato quando l'importo ISEE inserito supera i 17.747,58

```
{
  "label": "Columns",
  "columns": [
    {
      "components": [
        {
          "label": "HTML",
          "tag": "div",
          "className": "alert alert-danger",
          "attrs": [
            {
              "attr": "",
              "value": ""
            }
          ],
          "content": "<h5>Attenzione!</h5>\nL'ISEE riportato è troppo alto. Non è possibile continuare la compilazione",
          "refreshOnChange": false,
          "key": "html9",
          "type": "htmlelement",
          "input": false,
          "tableView": false
        }
      ],
      "width": 12,
      "offset": 0,
      "push": 0,
      "pull": 0,
      "size": "md",
      "currentWidth": 12
    },
    {
      "components": [
        {
          "label": "admitted",
          "customClass": "d-none",
          "tableView": false,
          "clearOnHide": false,
          "validate": {
            "required": true
          },
          "key": "admitted",
          "type": "checkbox",
          "input": true,
          "defaultValue": false
        }
      ],
      "size": "md",
      "width": 12,
      "offset": 0,
      "push": 0,
      "pull": 0,
      "currentWidth": 12
    }
  ],
  "key": "columns2",
  "customConditional": "importo = parseFloat(data.economic_situation_indicator.data.value.replace(\",\",\".\"))\nshow = (importo && importo > 17747.58) ? true : false ",
  "type": "columns",
  "input": false,
  "tableView": false
}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.opencityitalia.it/stanza-del-cittadino/guida-alla-creazione-dei-servizi-digitali/creare-un-servizio/le-funzioni/validazione-dei-dati.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
