# Enum e limiti di validazione di string-format

> Eseguire controlli di schema compatti positivi e negativi per i formati enum, Color, Base64, Zip, Icon, JSON e IP.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: it
Content-SHA256: 605215b34f7a43fa66cf7460c8634c65798078d3156e7e66a402815f28b8645e
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Gli enum compatti usano `status:{draft|published}` (anche il punto e virgola separa le scelte). La stringa viene ripulita prima del controllo di appartenenza esatto, sensibile alle maiuscole. Un enum obbligatorio rifiuta un valore omesso o vuoto. Gli oggetti annidati usano `{name:Type}`; non sono dichiarazioni di enum.

In `total5@0.0.19`, `Color` accetta l'esadecimale `#RGB`, `#RRGGBB` e `#RRGGBBAA`; non accetta i nomi di colore CSS. `Icon` valida un modello di nome di classe, non la presenza della risorsa dell'icona. `Base64` e `Zip` usano i validatori del framework: accettare un formato non è verificare il contenuto. Nel parser dello schema compatto di questa versione, **`JSON` e `IP` non sono sottotipi riconosciuti e ricadono su semplici stringhe**. JSON malformato e testo IP non valido vengono accettati. Lo schema JSON esplicito qui sotto imposta valori `subtype` nativi per abilitare questi controlli; non analizza una stringa JSON in un oggetto. Non usare `SafeString` al posto di parametri SQL vincolati o dell'escaping dell'output.

```js controllers/formats.js
var schema = NEWSCHEMA('FormatBoundaries', '*status:{draft|published},*color:Color,*blob:Base64,*zip:Zip,*icon:Icon,*document:JSON,*address:IP');
var explicit = Total.newjsonschema('ExplicitFormats', { $id: 'ExplicitFormats', type: 'object', required: ['document','address'], properties: { document: { type: 'string', subtype: 'json' }, address: { type: 'string', subtype: 'ip' } } });
exports.install = function() {
	ROUTE('POST /explicit/ @json', function($) {
		var result = explicit.transform($.body);
		if (result.error) { $.response.status = 400; $.json({ error: 'invalid format' }); }
		else $.json(result.response);
	});
	ROUTE('POST /formats/ @json', formats);
};
function formats($) {
	var result = schema.transform($.body);
	if (result.error) {
		$.response.status = 400;
		$.json({ error: 'invalid format' });
	} else
		$.json(result.response);
}
```
