Validators

Validatori Rete

Validatori per indirizzi e identificatori di rete - IP, MAC, hostname, UUID, SSN, coordinate, IMSI, IMEI, porta e CIDR.

Panoramica

I validatori rete coprono gli identificatori tecnici e geografici usati in contesti IT e telco: indirizzi IP (v4/v6), indirizzi MAC, hostname DNS, UUID/GUID, numeri di previdenza sociale, coordinate geografiche, identificativi mobili (IMSI/IMEI), porte di rete e notazione CIDR.

Validatori

ipaddress

Sintassi: ipaddress oppure ipaddress:versione
Descrizione: Verifica la validità di un indirizzo IP. Senza parametro accetta sia IPv4 che IPv6. Con parametro, valida solo la versione specificata. Limite di 45 caratteri per protezione anti-ReDoS.
Parametro: (opzionale) v4 oppure v6

Esempi:

// IPv4
ValidationService.validate('192.168.1.1', 'ipaddress')       // qualsiasi versione
ValidationService.validate('192.168.1.1', 'ipaddress:v4')    // solo IPv4
ValidationService.validate('255.255.255.255', 'ipaddress:v4')
ValidationService.validate('0.0.0.0', 'ipaddress:v4')

// IPv6
ValidationService.validate('::1', 'ipaddress:v6')                       // localhost
ValidationService.validate('2001:db8::1', 'ipaddress:v6')               // abbreviato
ValidationService.validate('fe80::1%eth0', 'ipaddress:v6')              // link-local

// Non valido
ValidationService.validate('256.0.0.1', 'ipaddress:v4')    // ottetto fuori range
ValidationService.validate('192.168.1', 'ipaddress:v4')    // manca un ottetto

// In schema DynamicFormLayouts
{ name: 'indirizzoip', type: 'text', validation: 'required|ipaddress:v4' }

macaddress

Sintassi: macaddress oppure macaddress:formato
Descrizione: Verifica la validità di un indirizzo MAC. Senza parametro accetta tutti i formati standard. Con parametro, valida solo il formato specificato.
Parametro: (opzionale) colon (AA:BB:CC), hyphen (AA-BB-CC), dot (AABB.CCDD.EEFF)

Esempi:

// Accetta tutti i formati
ValidationService.validate('00:1A:2B:3C:4D:5E', 'macaddress')   // colon
ValidationService.validate('00-1A-2B-3C-4D-5E', 'macaddress')   // hyphen
ValidationService.validate('001A.2B3C.4D5E', 'macaddress')      // dot

// Formato specifico
ValidationService.validate('00:1A:2B:3C:4D:5E', 'macaddress:colon')   // valido
ValidationService.validate('00-1A-2B-3C-4D-5E', 'macaddress:hyphen')  // valido
ValidationService.validate('001A.2B3C.4D5E', 'macaddress:dot')        // valido

// In schema DynamicFormLayouts
{ name: 'macdispositivo', type: 'text', validation: 'required|macaddress:colon' }

hostname

Sintassi: hostname
Descrizione: Verifica che il valore sia un hostname DNS valido. Controlla: lunghezza massima 255 caratteri, ogni label massimo 63 caratteri, solo caratteri alfanumerici e trattini (RFC 1035). Il trattino non può essere in posizione iniziale o finale.

Esempi:

// Valido
ValidationService.validate('server01', 'hostname')
ValidationService.validate('web.example.com', 'hostname')
ValidationService.validate('my-server.local', 'hostname')
ValidationService.validate('sub.domain.example.com', 'hostname')

// Non valido
ValidationService.validate('-server', 'hostname')             // inizia con -
ValidationService.validate('server-', 'hostname')             // finisce con -
ValidationService.validate('server name', 'hostname')         // spazio non ammesso
ValidationService.validate('server_01', 'hostname')           // underscore non ammesso

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

uuid

Sintassi: uuid oppure uuid:versione
Descrizione: Verifica che il valore sia un UUID/GUID valido nel formato standard xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Con parametro, valida solo la versione specificata.
Parametro: (opzionale) v4, v5, any (default: any)

Esempi:

// Qualsiasi versione UUID
ValidationService.validate('550e8400-e29b-41d4-a716-446655440000', 'uuid')

// UUID v4 (random)
ValidationService.validate('550e8400-e29b-41d4-a716-446655440000', 'uuid:v4')  // valido
ValidationService.validate('550e8400-e29b-51d4-a716-446655440000', 'uuid:v4')  // non valido (v5)

// UUID v5 (namespace-based)
ValidationService.validate('550e8400-e29b-51d4-a716-446655440000', 'uuid:v5')  // valido

// Non valido
ValidationService.validate('not-a-uuid', 'uuid')
ValidationService.validate('550e8400e29b41d4a716446655440000', 'uuid')  // senza trattini

// In schema DynamicFormLayouts
{ name: 'idesterno', type: 'text', validation: 'required|uuid:v4' }

socialsecuritynumber

Sintassi: socialsecuritynumber oppure socialsecuritynumber:paese
Descrizione: Verifica la validità di un numero di previdenza sociale. Senza paese tenta tutti i formati noti. Con paese valida solo quel formato.
Parametro: (opzionale) US, FR, ES

PaeseFormato
USXXX-XX-XXXX (con o senza trattini)
FR15 caratteri: sesso + anno + mese + dipartimento + comune
ES2 cifre + carattere + 7 cifre

Esempi:

// US Social Security Number
ValidationService.validate('123-45-6789', 'socialsecuritynumber:US')
ValidationService.validate('123456789', 'socialsecuritynumber:US')  // senza trattini

// Francese
ValidationService.validate('180012A00000100', 'socialsecuritynumber:FR')

// Spagnolo
ValidationService.validate('12A1234567', 'socialsecuritynumber:ES')

// In schema DynamicFormLayouts
{ name: 'ssn', type: 'text', validation: 'required|socialsecuritynumber:US' }

coordinates

Sintassi: coordinates
Descrizione: Verifica che il valore sia una coppia di coordinate geografiche nel formato latitudine,longitudine. Valida i range: latitudine -90/+90, longitudine -180/+180. Restituisce errori separati per latitudine e longitudine non valide.

Esempi:

// Valido
ValidationService.validate('45.4642,9.1900', 'coordinates')     // Milano
ValidationService.validate('41.9028,12.4964', 'coordinates')    // Roma
ValidationService.validate('0,0', 'coordinates')                 // origin

// Non valido
ValidationService.validate('91,0', 'coordinates')     // lat fuori range
ValidationService.validate('0,181', 'coordinates')    // lng fuori range
ValidationService.validate('45.46', 'coordinates')    // manca longitudine

// In schema DynamicFormLayouts
{ name: 'posizione', type: 'text', validation: 'required|coordinates' }

imsi

Sintassi: imsi
Descrizione: Verifica la validità di un IMSI (International Mobile Subscriber Identity): 14-15 cifre numeriche. Le prime 3 cifre sono il MCC (Mobile Country Code), valori validi: 001 (test) o 200-999.

Esempi:

// Valido
ValidationService.validate('310150123456789', 'imsi')  // US (MCC 310)
ValidationService.validate('22201234567890', 'imsi')   // Italia (MCC 222)

// Non valido
ValidationService.validate('123456789', 'imsi')        // troppo corto
ValidationService.validate('1234567890123456', 'imsi') // troppo lungo
ValidationService.validate('100123456789012', 'imsi')  // MCC non valido (100)

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

imei

Sintassi: imei
Descrizione: Verifica la validità di un IMEI (International Mobile Equipment Identity): esattamente 15 cifre numeriche con verifica checksum tramite algoritmo di Luhn. Spazi e trattini vengono rimossi automaticamente.

Esempi:

// Valido (IMEI con checksum Luhn corretto)
ValidationService.validate('490154203237518', 'imei')

// Con separatori (vengono rimossi)
ValidationService.validate('490154-203237-518', 'imei')
ValidationService.validate('490154 203237 518', 'imei')

// Non valido
ValidationService.validate('12345678901234', 'imei')   // 14 cifre
ValidationService.validate('490154203237519', 'imei')  // Luhn fallisce

// In schema DynamicFormLayouts
{ name: 'imeidispositivo', type: 'text', validation: 'required|imei' }

port

Sintassi: port
Descrizione: Verifica che il valore sia un numero di porta TCP/UDP valido (intero da 0 a 65535). Accetta sia stringhe numeriche che numeri interi.

Esempi:

// Valido
ValidationService.validate(80, 'port')
ValidationService.validate(8080, 'port')
ValidationService.validate('443', 'port')
ValidationService.validate(0, 'port')
ValidationService.validate(65535, 'port')

// Non valido
ValidationService.validate(-1, 'port')     // negativo
ValidationService.validate(65536, 'port')  // fuori range
ValidationService.validate('abc', 'port')  // non numerico

// In schema DynamicFormLayouts
{ name: 'portaserver', type: 'number', validation: 'required|port' }

cidr

Sintassi: cidr
Descrizione: Verifica che il valore sia una notazione CIDR valida (IP/prefix). Supporta IPv4 (prefisso 0-32) e IPv6 (prefisso 0-128).

Esempi:

// CIDR IPv4
ValidationService.validate('192.168.1.0/24', 'cidr')   // rete di classe C
ValidationService.validate('10.0.0.0/8', 'cidr')       // rete di classe A
ValidationService.validate('192.168.1.1/32', 'cidr')   // singolo host

// CIDR IPv6
ValidationService.validate('2001:db8::/32', 'cidr')

// Non valido
ValidationService.validate('192.168.1.0/33', 'cidr')   // prefisso IPv4 > 32
ValidationService.validate('192.168.1.0', 'cidr')      // manca prefisso
ValidationService.validate('not-an-ip/24', 'cidr')     // IP non valido

// In schema DynamicFormLayouts
{ name: 'subnetcidr', type: 'text', validation: 'required|cidr' }