# Енуми и граници за валидиране на формат

> Извършване на положителни и отрицателни компактни схеми проверки за енуми, Цвет, Base64, Zip, Icon, JSON и IP формати.

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

Компактните enum използват `status:{draft|published}` (и точката и запетая разделя избора). Низът се подрязва преди точната проверка за членство с отчитане на главни и малки букви. Задължителен enum отхвърля пропусната или празна стойност. Вложените обекти използват `{name:Type}`; те не са декларации на enum.

В `total5@0.0.19` `Color` приема шестнадесетично `#RGB`, `#RRGGBB` и `#RRGGBBAA`; не приема имена на цветове в CSS. `Icon` валидира шаблон на име на клас, не наличието на ресурса на иконата. `Base64` и `Zip` използват валидаторите на frameworka: приемането на формат не е проверка на съдържание. В парсера на компактна схема на тази версия **`JSON` и `IP` не са разпознати подтипове и се връщат към обикновени низове**. Повреден JSON и невалиден IP текст се приемат. Изричната JSON схема по-долу задава вградени стойности `subtype`, за да включи тези проверки; не разчита JSON низ в обект. Не използвайте `SafeString` вместо обвързани SQL параметри или екраниране на изхода.

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