Validators

Validatori Core

Regole fondamentali di validazione per campi obbligatori, lunghezze, range, pattern e valori enumerati.

Panoramica

I validatori core forniscono le regole di base utilizzate nella maggior parte dei form: obbligatorietà del campo, vincoli di lunghezza/valore, confronto con espressioni regolari e liste di valori ammessi. Sono il punto di partenza per qualsiasi schema di validazione.

Comportamento comune

Tutti i validatori core (eccetto required) considerano un valore vuoto (null, undefined, stringa vuota) come valido. Per rendere un campo obbligatorio, combinare required con gli altri validatori:

required|min:3|max:100

Validatori

required

Sintassi: required
Descrizione: Verifica che il campo non sia vuoto. Per le stringhe controlla che non siano vuote dopo il trim. Per gli array verifica che contengano almeno un elemento.

Esempi:

// Valido
ValidationService.validate('testo', 'required')
ValidationService.validate(['a', 'b'], 'required')

// Non valido
ValidationService.validate('', 'required')
ValidationService.validate([], 'required')
ValidationService.validate(null, 'required')

// In schema DynamicFormLayouts
{ name: 'nome', type: 'text', validation: 'required' }

min

Sintassi: min:N
Descrizione: Per le stringhe verifica la lunghezza minima (numero di caratteri). Per i numeri verifica che il valore sia maggiore o uguale a N.
Parametro: valore minimo (intero)

Esempi:

// Stringa - lunghezza minima
ValidationService.validate('ab', 'min:3')   // non valido: troppo corta
ValidationService.validate('abc', 'min:3')  // valido

// Numero - valore minimo
ValidationService.validate(5, 'min:10')     // non valido: 5 < 10
ValidationService.validate(15, 'min:10')    // valido

// In schema DynamicFormLayouts
{ name: 'username', type: 'text', validation: 'required|min:3|max:30' }

max

Sintassi: max:N
Descrizione: Per le stringhe verifica la lunghezza massima. Per i numeri verifica che il valore sia minore o uguale a N.
Parametro: valore massimo (intero)

Esempi:

// Stringa - lunghezza massima
ValidationService.validate('test123456', 'max:5')  // non valido: troppo lunga
ValidationService.validate('ciao', 'max:5')        // valido

// Numero - valore massimo
ValidationService.validate(150, 'max:100')          // non valido: 150 > 100
ValidationService.validate(50, 'max:100')           // valido

// In schema DynamicFormLayouts
{ name: 'descrizione', type: 'textarea', validation: 'max:500' }

length

Sintassi: length:N
Descrizione: Verifica che la stringa abbia esattamente N caratteri. Utile per codici a lunghezza fissa (PIN, OTP, codici postali).
Parametro: lunghezza esatta (intero)

Esempi:

// Codice a 6 caratteri
ValidationService.validate('AB123', 'length:6')   // non valido: 5 caratteri
ValidationService.validate('AB1234', 'length:6')  // valido

// PIN a 4 cifre
ValidationService.validate('123', 'length:4')     // non valido
ValidationService.validate('1234', 'length:4')    // valido

// In schema DynamicFormLayouts
{ name: 'pin', type: 'text', validation: 'required|length:4' }

between

Sintassi: between:min,max
Descrizione: Verifica che un valore numerico sia compreso tra min e max (inclusi). Restituisce errore se il valore non è un numero o è fuori range.
Parametro: range nel formato min,max (numeri separati da virgola)

Esempi:

// Valore in range
ValidationService.validate(50, 'between:1,100')   // valido
ValidationService.validate(1, 'between:1,100')    // valido (incluso)
ValidationService.validate(100, 'between:1,100')  // valido (incluso)

// Valore fuori range
ValidationService.validate(0, 'between:1,100')    // non valido
ValidationService.validate(150, 'between:1,100')  // non valido

// In schema DynamicFormLayouts
{ name: 'percentuale', type: 'number', validation: 'required|between:0,100' }

range

Sintassi: range:min,max
Descrizione: Alias di between. Verifica che un valore numerico sia compreso nel range specificato. Utile per chi preferisce la nomenclatura "range" rispetto a "between".
Parametro: range nel formato min,max

Esempi:

// Equivalente a between
ValidationService.validate(50, 'range:1,100')  // valido
ValidationService.validate(150, 'range:1,100') // non valido

// In schema DynamicFormLayouts
{ name: 'eta', type: 'number', validation: 'required|range:18,120' }

pattern

Sintassi: pattern:regex
Descrizione: Verifica che la stringa corrisponda all'espressione regolare specificata. Il pattern non deve includere delimitatori. Include protezione anti-ReDoS: pattern più lunghi di 500 caratteri o con quantificatori annidati pericolosi vengono rifiutati.
Parametro: espressione regolare (senza delimitatori /)

Esempi:

// Solo lettere minuscole e numeri
ValidationService.validate('abc123', 'pattern:^[a-z0-9]+$')  // valido
ValidationService.validate('abc-123', 'pattern:^[a-z0-9]+$') // non valido

// Formato specifico (es. codice prodotto)
ValidationService.validate('PROD-001', 'pattern:^[A-Z]+-\d{3}$')  // valido

// In schema DynamicFormLayouts
{ name: 'codice', type: 'text', validation: 'required|pattern:^[A-Z]{2}\\d{4}$' }

regex

Sintassi: regex:pattern
Descrizione: Alias di pattern. Verifica match con espressione regolare. Stessa logica e protezione anti-ReDoS di pattern.
Parametro: espressione regolare (senza delimitatori)

Esempi:

// Equivalente a pattern
ValidationService.validate('test123', 'regex:^[a-z]+\\d+$')  // valido
ValidationService.validate('123test', 'regex:^[a-z]+\\d+$')  // non valido

// In schema DynamicFormLayouts
{ name: 'targa', type: 'text', validation: 'required|regex:^[A-Z]{2}\\d{3}[A-Z]{2}$' }

enum

Sintassi: enum:val1,val2,val3
Descrizione: Verifica che il valore sia uno di quelli specificati nella lista. I valori sono separati da virgola e confrontati come stringhe.
Parametro: lista valori ammessi separati da virgola

Esempi:

// Valore ammesso
ValidationService.validate('active', 'enum:active,pending,closed')   // valido
ValidationService.validate('pending', 'enum:active,pending,closed')  // valido

// Valore non ammesso
ValidationService.validate('deleted', 'enum:active,pending,closed')  // non valido
ValidationService.validate('ACTIVE', 'enum:active,pending,closed')   // non valido (case sensitive)

// In schema DynamicFormLayouts
{ name: 'stato', type: 'select', validation: 'required|enum:bozza,pubblicato,archiviato' }