# Enums et limites de validation en format

> Exécuter des contrôles de schéma compact positifs et négatifs pour les enums, Color, Base64, Zip, Icon, JSON et IP.

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

Les enums compacts utilisent `status:{draft|published}` (le point-virgule sépare aussi les choix). La chaîne est rognée avant la vérification d'appartenance exacte, sensible à la casse. Un enum obligatoire rejette une valeur omise ou vide. Les objets imbriqués utilisent `{name:Type}` ; ce ne sont pas des déclarations d'enum.

Dans `total5@0.0.19`, `Color` accepte l'hexadécimal `#RGB`, `#RRGGBB` et `#RRGGBBAA` ; il n'accepte pas les noms de couleurs CSS. `Icon` valide un motif de nom de classe, pas la présence de la ressource d'icône. `Base64` et `Zip` utilisent les validateurs du framework : accepter un format n'est pas vérifier le contenu. Dans l'analyseur de schéma compact de cette version, **`JSON` et `IP` ne sont pas des sous-types reconnus et retombent sur de simples chaînes**. Un JSON mal formé et un texte d'IP invalide sont acceptés. Le schéma JSON explicite ci-dessous définit des valeurs `subtype` natives pour activer ces contrôles ; il n'analyse pas une chaîne JSON en objet. N'utilisez pas `SafeString` à la place de paramètres SQL liés ou de l'échappement de la sortie.

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