2017-08-25 3 views
4

J'utilise Ajv pour valider mes données JSON. Je suis incapable de trouver un moyen de valider la chaîne vide en tant que valeur d'une clé. J'ai essayé d'utiliser un motif, mais il ne lance pas de message approprié.Validation des valeurs vides dans le schéma json utilisant AJV

Voici mon schéma

{ 
    "type": "object", 
    "properties": { 
     "user_name": { "type": "string" , "minLength": 1}, 
     "user_email": { "type": "string" , "minLength": 1}, 
     "user_contact": { "type": "string" , "minLength": 1} 
    }, 
    "required": [ "user_name", 'user_email', 'user_contact'] 
} 

J'utilise minLength pour vérifier que la valeur doit contenir au moins un caractère. Mais cela permet aussi un espace vide.

Répondre

1

Actuellement, il n'y a pas d'option intégrée dans AJV pour le faire.

1

Vous pouvez faire:

ajv.addKeyword('isNotEmpty', { 
    type: 'string', 
    validate: function (schema, data) { 
    return typeof data === 'string' && data.trim() !== '' 
    }, 
    errors: false 
}) 

Et dans le schéma JSON:

{ 
    [...] 
    "type": "object", 
    "properties": { 
    "inputName": { 
     "type": "string", 
     "format": "url", 
     "isNotEmpty": true, 
     "errorMessage": { 
     "isNotEmpty": "...", 
     "format": "..." 
     } 
    } 
    } 
} 
0

J'ai trouvé une autre façon de le faire en utilisant "pas" mot-clé avec "maxLength":

{ 
    [...] 
    "type": "object", 
    "properties": { 
    "inputName": { 
     "type": "string", 
     "allOf": [ 
     {"not": { "maxLength": 0 }, "errorMessage": "..."}, 
     {"minLength": 6, "errorMessage": "..."}, 
     {"maxLength": 100, "errorMessage": "..."}, 
     {"..."} 
     ] 
    }, 
    }, 
    "required": [...] 
} 

Malheureusement, si quelqu'un remplit le champ avec des espaces, il sera valide car l'espace compte comme caractère. C'est pourquoi je préfère la méthode ajv.addKeyword ('isNotEmpty', ...), elle peut utiliser une fonction trim() avant de valider.

À la votre!