73 votes

Bibliothèque de validation pour Node.js

Existe-t-il un bon cadre de validation pour node.js qui valide une variable pour :

  • s'il s'agit d'un type de chaîne, de date, de nombre, etc.
  • longueur max et min
  • e-mail, téléphone
  • etc...

82voto

Baggz Points 6836

J'ai récemment découvert validateur de nœuds par chriso .

Exemple

var check = require('validator').check,
    sanitize = require('validator').sanitize

//Validate
check('test@email.com').len(6, 64).isEmail();       //Methods are chainable
check('abc').isInt();                               //Throws 'Invalid integer'
check('abc', 'Please enter a number').isInt();      //Throws 'Please enter a number'
check('abcdefghijklmnopzrtsuvqxyz').is(/^[a-z]+$/);

//Sanitize / Filter
var int = sanitize('0123').toInt();                  //123
var bool = sanitize('true').toBoolean();             //true
var str = sanitize(' \s\t\r hello \n').trim();      //'hello'
var str = sanitize('aaaaaaaaab').ltrim('a');        //'b'
var str = sanitize(large_input_str).xss();
var str = sanitize('&lt;a&gt;').entityDecode();     //'<a>'

15voto

Parris Points 4366

Je voulais des validations de type ruby on rails et cakephp. Je savais que c'était quelque chose que j'utiliserais encore et encore, alors j'ai créé rapidement ce module npm : https://npmjs.org/package/iz

Il lit sémantiquement comme bien comme jasmine, et peut être utilisé côté client ou serveur. Cela signifie qu'il prend en charge commonjs et amd, ainsi que les règles de validation transmises par JSON.

Il est assez bien testé en unité, il n'a pas de dépendances de production, et la portée est verrouillée à la seule validation. Il semble que nous ayons une petite communauté en place maintenant. Les idées, les retours et les demandes de modifications sont les bienvenus.

Fonctions actuelles de la bibliothèque :

iz.alphaNumeric(*);               // Is number or string(contains only numbers or strings)
iz.between(number, start, end);   // Number is start or greater but less than or equal to end, all params numeric
iz.blank(*);                      // Empty string, undefined or null
iz.boolean(*);                    // true, false, 0, 1
iz.cc(*);                         // Luhn checksum approved value
iz.date(*);                       // Is a data obj or is a string that is easily converted to a date
iz.decimal(*);                    // Contains 1 decimal point and potentially can have a - at the beginning
iz.email(*);                      // Seems like a valid email address
iz.extension(ob1, ob2);           // If obj2's methods are all found in obj1
iz.fileExtension(arr, value);     // Checks if the extension of value is in arr. An obj can be provide, but must have indexOf defined.
iz.fileExtensionAudio(value);     // Check against mp3, ogg, wav, aac
iz.fileExtensionImage(value);     // Check against png, jpg, jpeg, gif, bmp, svg, gif
iz.inArray(arr, value);           // If * is in the array
iz.int(*, bool (optional));       // Is an int. If the 2nd variable is true (false by default) a decimal is allowed
iz.ip(str);                       // str resembles an IPV4 or IPV6 address
iz.minLen(val, min);              // val (str or arr) is greater than min
iz.maxLen(val, max);              // val (str or arr) is shorter than max
iz.multiple(num, mult);           // Number is multiple of another number
iz.number(*);                     // Is either an int or decimal
iz.ofType(obj, typeName);         // If it is a named object, and the name matches the string
iz.phone(str, canHaveExtension?); // Is an american phone number. Any punctuations are allowed.
iz.postal(*);                     // Is a postal code or zip code
iz.ssn(*);                        // Is a social security number

9voto

Trantor Liu Points 878

Node-validateur est une bibliothèque de méthodes de validation, de filtrage et d'assainissement des chaînes de caractères.

Donc, si vous voulez avoir un meilleur support pour les nombres et les tableaux, vous pouvez essayer Chai.js . Voici quelques exemples :

var expect = require('chai').expect;
try {
    expect([1, 2, 3]).to.have.length.below(4);
    expect(5).to.be.within(3,6);
    expect('test').to.have.length(4);
} catch (e) {
    // should not occur
}

5voto

intuited Points 7763

J'en déduis que c'est le genre de chose que le schéma est destiné à faire. Notez qu'il est étiqueté comme étant "en développement" (étiqueté comme v0.1a). Je ne l'ai pas essayé moi-même, mais il semble assez bon d'après les exemples montrés dans le README.

3voto

Tor Valamo Points 14209

Pas au niveau d'une variable, mais au niveau d'un argument de fonction :

http://github.com/torvalamo/argtype.js

La date doit actuellement être transmise en tant que type "objet". C'est définitivement quelque chose que j'ai oublié, et que je mettrai sur la todo-list ;)

La longueur maximale et minimale spécifique n'est pas prise en charge et ne sera probablement pas mise en œuvre (mais qui sait). L'email, le téléphone et tout cela peut être vérifié par regex. Voir l'exemple sur la page github, qui inclut un exemple (simple) de regex.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X