2010-11-03 20 views
71

¿Hay un buen marco de validación para Node.js que valida una variable para:biblioteca de validación para Node.js

  • si es un tipo de cadena, fecha, etc Número
  • máxima y mínima longitud
  • correo electrónico, teléfono
  • etc ...
+1

Debido a que la cuestión está cerrada estoy comentando mi respuesta, joi.js de la HAPI es un muy amplio marco modelo Javascript. Tiene todo lo que quieres y mucho más. Gran documentación y excelentes usuarios usándola en las producciones –

+0

. Te animo a que compruebes el marco [contexttable.js] (https://github.com/xpepermint/contextablejs) que proporciona validaciones basadas en esquemas y manejo de errores. Es una especie de ActiveRecord para Node.js. – xpepermint

Respuesta

79

Recientemente he descubierto node-validator por chriso.

Ejemplo

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í, pero el validador de nodos se centra en la validación de cadenas. Por lo tanto, verificando el tipo de una variable como "¿es de tipo Fecha?" es [no es para lo que está destinada esta biblioteca] (https://github.com/chriso/node-validator/issues/52). – sebpiq

+2

Es una pena. Realmente me gusta su idea de cómo debería funcionar la validación, creo que es útil, sin embargo, me gustaría tener una forma de tener validaciones más estrictas. –

+0

Acabo de lanzar este nuevo marco de validación: https://github.com/wilkerlucio/composed-validations –

3
No

en un nivel variable, pero en un nivel argumento de la función:

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

Fecha tiene que pasar como tipo 'objeto'. Definitivamente es algo que he olvidado y que pondré en la lista de tareas pendientes. ;)

La longitud máxima y mínima específica no es compatible, y probablemente no se implementará (pero quién sabe). Correo electrónico, teléfono y todo lo que puede verificarse por regex. Vea el ejemplo en la página de github, que incluye un ejemplo de expresión regular (simple).

5

Entiendo que este es el tipo de cosas que el módulo schema está destinado a hacer. Tenga en cuenta que está etiquetado como "en desarrollo" (etiquetado como v0.1a). No lo he probado yo mismo, pero se ve muy bien a partir de los ejemplos que se muestran en el archivo README.

9

Node-validator es una biblioteca de métodos de validación de cadena, de filtrado y de desinfección.

Así que si quieres tener un mejor soporte para números y matrices, puedes probar Chai.js. He aquí algunos ejemplos:

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

Sin ofender pero que to.have, to.be me parece inútil. ¿Estoy escribiendo un poema o un programa? 'if (the (" string "). I.want.to.validate.is.shorter.than (123) === false) {console.log ('La cadena es demasiado larga'); } ' –

+3

las llamadas a métodos extra largos e inútiles están ahí porque Chai está diseñado para escribir pruebas unitarias. – TinyTimZamboni

+0

@SavasVedova, estás escribiendo ambos. – AJB

14

yo quería rubí en los carriles y las validaciones de estilo cakephp. Sabía que era algo que usaría una y otra vez, así que creé este módulo npm rápido: https://npmjs.org/package/iz

Se lee semánticamente como el jazmín, y puede usarse en el lado del cliente o del servidor. Esto significa que viene con soporte para commonjs y amd junto con reglas de validación pasadas a través de JSON.

Está bastante bien probado en una unidad, no tiene dependencias de producción, y el alcance está bloqueado a solo validación. Parece que tenemos una comunidad pequeña yendo ahora. Las ideas, los comentarios y las solicitudes de extracción son bienvenidos.

funciones de biblioteca actuales:

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

recomiendo valida hay falta de documentación sin embargo, es bastante sencillo de entender mirando el examples.

características

valida son:

  • sanitización
  • validación síncrona y asíncrona
  • Grupos
  • extensible
0

estoy terminando de escribir una biblioteca de validaciones de Javascript (ambos nodos y navegador), escribiré los documentos en los próximos días, pero el código está casi listo: https://github.com/wilkerlucio/composed-validations

Por favor, hágamelo saber si usted tiene alguna pregunta/sugerencia sobre él :)

Cuestiones relacionadas