# Limitele de validare a enumelor și a formatului string

> Executați controale compacte pozitive și negative pentru enume, Color, Base64, Zip, Icon, JSON și formate IP.

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

Enumurile compacte folosesc `status:{draft|published}` (punctul și virgula separă și el alegerile). Șirul este tăiat înainte de verificarea exactă a apartenenței, sensibilă la majuscule. Un enum obligatoriu respinge o valoare omisă sau goală. Obiectele imbricate folosesc `{name:Type}`; nu sunt declarații de enum.

În `total5@0.0.19`, `Color` acceptă hexazecimal `#RGB`, `#RRGGBB` și `#RRGGBBAA`; nu acceptă nume de culori CSS. `Icon` validează un model de nume de clasă, nu prezența resursei iconiței. `Base64` și `Zip` folosesc validatorii framework-ului: acceptarea unui format nu este verificarea conținutului. În parserul de schemă compactă din această versiune, **`JSON` și `IP` nu sunt subtipuri recunoscute și revin la șiruri simple**. JSON malformat și text IP invalid sunt acceptate. Schema JSON explicită de mai jos setează valori native `subtype` pentru a activa aceste verificări; nu parsează un șir JSON într-un obiect. Nu folosi `SafeString` în locul parametrilor SQL legați sau al escapării ieșirii.

```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);
}
```
