Validatori Core
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' }