# Ενόματα και όρια επικύρωσης μορφής στυλ

> Διεξάγετε θετικές και αρνητικές επιθεωρήσεις σχήματος για τις μορφές enums, Color, Base64, Zip, Icon, JSON και IP.

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

Τα συμπαγή enums χρησιμοποιούν `status:{draft|published}` (και η άνω τελεία διαχωρίζει τις επιλογές). Το αλφαριθμητικό περικόπτεται πριν από τον ακριβή έλεγχο συμμετοχής με διάκριση πεζών-κεφαλαίων. Ένα υποχρεωτικό enum απορρίπτει μια παραλειπόμενη ή κενή τιμή. Τα εμφωλευμένα αντικείμενα χρησιμοποιούν `{name:Type}`· δεν είναι δηλώσεις enum.

Στο `total5@0.0.19`, το `Color` δέχεται δεκαεξαδικά `#RGB`, `#RRGGBB` και `#RRGGBBAA`· δεν δέχεται ονόματα χρωμάτων CSS. Το `Icon` επικυρώνει ένα μοτίβο ονόματος κλάσης, όχι την ύπαρξη του πόρου του εικονιδίου. Τα `Base64` και `Zip` χρησιμοποιούν τους validators του framework: η αποδοχή μιας μορφής δεν είναι επαλήθευση περιεχομένου. Στον parser συμπαγούς σχήματος αυτής της έκδοσης, **τα `JSON` και `IP` δεν είναι αναγνωρισμένοι υποτύποι και επιστρέφουν σε απλά αλφαριθμητικά**. Μη έγκυρο JSON και μη έγκυρο κείμενο IP γίνονται δεκτά. Το ρητό σχήμα JSON παρακάτω ορίζει εγγενείς τιμές `subtype` για να ενεργοποιήσει αυτούς τους ελέγχους· δεν αναλύει ένα αλφαριθμητικό JSON σε αντικείμενο. Μη χρησιμοποιείτε το `SafeString` αντί για δεσμευμένες παραμέτρους SQL ή 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);
}
```
