# Enums en string-format validatiegrens

> Voer positieve en negatieve compacte schema-checks voor enums, Color, Base64, Zip, Icon, JSON en IP-formaat.

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

Compacte enums gebruiken `status:{draft|published}` (ook een puntkomma scheidt de keuzes). De string wordt getrimd vóór de exacte, hoofdlettergevoelige lidmaatschapscontrole. Een vereiste enum weigert een weggelaten of lege waarde. Geneste objecten gebruiken `{name:Type}`; het zijn geen enumdeclaraties.

In `total5@0.0.19` accepteert `Color` hexadecimaal `#RGB`, `#RRGGBB` en `#RRGGBBAA`; CSS-kleurnamen worden niet geaccepteerd. `Icon` valideert een klassenaampatroon, niet de aanwezigheid van het icoonasset. `Base64` en `Zip` gebruiken de validators van het framework: het accepteren van een formaat is geen inhoudsverificatie. In de compacte-schemaparser van deze versie zijn **`JSON` en `IP` geen herkende subtypes en vallen ze terug op gewone strings**. Misvormde JSON en ongeldige IP-tekst worden geaccepteerd. Het expliciete JSON-schema hieronder stelt native `subtype`-waarden in om deze controles in te schakelen; het parseert geen JSON-string tot een object. Gebruik `SafeString` niet in plaats van gebonden SQL-parameters of uitvoer-escaping.

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