2010-11-03 12 views
71

C'è un quadro di convalida bene per node.js che convalida una variabile per:biblioteca di convalida per Node.js

  • se un tipo di stringa, data, numero ecc
  • max e min Lunghezza
  • e-mail, telefono
  • ecc ...
+1

Perché la questione è chiusa sto commentando la mia risposta, joi.js dalla Hapi è un piuttosto ampio quadro del modello javascript. Ha tutto ciò che vuoi e molto altro. Ottima documentazione e grandi utenti che lo utilizzano nelle produzioni –

+0

Vi incoraggio a controllare il framework [contextable.js] (https://github.com/xpepermint/contextablejs) che fornisce convalide basate su schemi e gestione degli errori. È una sorta di ActiveRecord per Node.js. – xpepermint

risposta

79

Recentemente ho scoperto node-validator di chriso.

Esempio

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

//Validate 
check('[email protected]').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>' 
+6

Sì, ma validatore di nodi si concentra sulla convalida della stringa. Quindi verificando il tipo di una variabile come "è di tipo Data?" [non è ciò che questa biblioteca è destinata a] (https://github.com/chriso/node-validator/issues/52). – sebpiq

+2

È un peccato. Mi piace molto la loro idea di come dovrebbe funzionare la convalida, penso sia utile, tuttavia mi piacerebbe avere un modo per avere convalide più severe. –

+0

Sto appena pubblicando questo nuovo framework di validazione: https://github.com/wilkerlucio/composed-validations –

3

Non su un livello variabile, ma su un livello di funzione argomento:

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

Data attualmente deve passare come tipo "oggetto". È definitivamente qualcosa che ho dimenticato e inserirò nella lista delle cose da fare. ;)

La lunghezza massima e minima specifica non è supportata e probabilmente non verrà implementata (ma chissà). Email, telefono e tutto ciò che può essere controllato tramite regex. Vedere l'esempio sulla pagina github, che include un esempio di (semplice) regex.

5

Capisco che questo è il genere di cose che il modulo schema deve fare. Si noti che è etichettato come "in sviluppo" (contrassegnato come v0.1a). Non l'ho provato da solo, ma sembra piuttosto buono dagli esempi mostrati nel README.

9

Node-validator è una libreria di metodi di convalida stringa, filtraggio e sanificazione.

Quindi se si desidera avere un supporto migliore per Numbers e Array, si può provare Chai.js. Ecco alcuni esempi:

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 
} 
+9

Senza offesa, ma quello per cui mi sembra inutile. Sto scrivendo una poesia o un programma? 'if (the (" stringa "). I.want.to.validate.is.shorter.than (123) === false) {console.log ('La stringa è troppo lunga'); } ' –

+3

le chiamate al metodo extra lunghe e inutili ci sono perché Chai è progettato per la scrittura di test di unità. – TinyTimZamboni

+0

@SavasVedova, stai scrivendo entrambi. – AJB

14

Volevo rubino su rotaie e convalide stile cakephp. Sapevo che era qualcosa che avrei usato ripetutamente, quindi ho realizzato questo rapido modulo npm: https://npmjs.org/package/iz

Legge semanticamente come il gelsomino e può essere utilizzato lato client o server. Ciò significa che viene fornito con il supporto per commonjs e amd insieme alle regole di convalida passate tramite JSON.

È abbastanza ben collaudato, non ha dipendenze di produzione e l'ambito è bloccato solo per la validazione. Sembra che ora ci sia una piccola comunità. Idee, feedback e richieste di pull sono tutte benvenute.

attuali funzioni di libreria:

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 
0

vi consiglio valida ci sia mancanza di documentazione tuttavia è abbastanza semplice da capire guardando il examples.

caratteristiche

valida sono:

  • Sanitization
  • validazione sincrona e asincrona
  • Gruppi
  • Extensible
0

Sto finendo scrivendo una libreria su validazioni Javascript (sia nodo e browser), scriverò i documenti nei prossimi giorni, ma il codice è quasi pronto: https://github.com/wilkerlucio/composed-validations

Per favore fatemi sapere se avete domande/suggerimenti su di esso :)