Validierungsbibliothek für Node.js [geschlossen]

75

Gibt es ein gutes Validierungsframework für node.js, das eine Variable validiert für:

  • Wenn es sich um eine Art Zeichenfolge, Datum, Nummer usw. handelt
  • maximale und minimale Länge
  • E-Mail, Telefon
  • etc...
Ajsie
quelle
1
Da die Frage geschlossen ist, kommentiere ich meine Antwort. Joi.js aus dem Hapi ist ein ziemlich umfangreiches Javascript-Modell-Framework. Es hat alles was Sie wollen und vieles mehr. Großartige Dokumentation und großartige Benutzer, die sie in Produktionen verwenden
Srivathsa Harish Venkataramana
Ich empfehle Ihnen, das Framework contextable.js zu überprüfen, das schemabasierte Validierungen und Fehlerbehandlung bietet. Es ist eine Art ActiveRecord für Node.js.
Xpepermint

Antworten:

86

Ich habe kürzlich Node-Validator von Chriso entdeckt .

Beispiel

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>'
Baggz
quelle
6
Ja, aber der Node-Validator konzentriert sich auf die String-Validierung. Überprüfen Sie daher den Typ einer Variablen wie "Ist sie vom Typ Datum?" ist nicht das, wofür diese Bibliothek gedacht ist .
Sebpiq
2
Es ist eine Schande. Ich mag ihre Idee, wie Validierung funktionieren sollte, sehr. Ich denke, sie ist praktisch, aber ich hätte gerne eine Möglichkeit, strengere Validierungen durchzuführen.
Gaston Sanchez
Ich veröffentliche gerade dieses neue Validierungsframework: github.com/wilkerlucio/composed-validations
Wilker Lucio
Ich kann nicht finden, wie Validator für optionale Parameter verwendet werden kann. Bietet der Node-Validator dies?
JehandadK
1
Ich habe sie alle überprüft und fand sie überhaupt nicht ausdrucksstark. Ich schrieb meine eigene npmjs.org/package/indicative
Aman Virk
15

Ich wollte Rubin auf Schienen und Validierungen im Cakephp-Stil. Ich wusste, dass es etwas war, das ich immer und immer wieder verwenden würde, also machte ich dieses schnelle npm-Modul: https://npmjs.org/package/iz

Es liest sich semantisch wie Jasmin und kann clientseitig oder serverseitig verwendet werden. Dies bedeutet, dass es Unterstützung für commonjs und amd sowie Validierungsregeln bietet, die über JSON übergeben werden.

Es ist ziemlich gut Unit-getestet, es hat keine Produktionsabhängigkeiten und der Bereich ist nur auf die Validierung beschränkt. Wir scheinen jetzt eine kleine Gemeinschaft zu haben. Ideen, Feedback und Pull-Anfragen sind willkommen.

Aktuelle Bibliotheksfunktionen:

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
Parris
quelle
10

Node-Validator ist eine Bibliothek mit Methoden zur Validierung, Filterung und Bereinigung von Zeichenfolgen.

Wenn Sie also eine bessere Unterstützung für Numbers and Arrays wünschen , können Sie Chai.js ausprobieren . Hier einige Beispiele:

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
}
Trantor Liu
quelle
11
Nichts für ungut, aber das scheint mir nutzlos zu sein. Schreibe ich ein Gedicht oder ein Programm? if (the("string").I.want.to.validate.is.shorter.than(123) === false) { console.log('The string is too long'); }
Savas Vedova
6
Die extra langen und nutzlosen Methodenaufrufe sind da, weil Chai zum Schreiben von Unit-Tests gedacht ist.
TinyTimZamboni
@ SavasVedova, du schreibst beides.
AJB
6

Ich verstehe , dass das Schemamodul so etwas tun soll. Beachten Sie, dass es als "in Entwicklung" gekennzeichnet ist (gekennzeichnet als v0.1a). Ich habe es selbst nicht ausprobiert, aber es sieht aus den Beispielen in der README-Datei ziemlich gut aus.

intuitiv
quelle
3

Nicht auf variabler Ebene, sondern auf Funktionsargumentebene:

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

Das Datum muss derzeit als Typ 'Objekt' übergeben werden. Es ist definitiv etwas, das ich vergessen habe und auf die ToDo-Liste setzen werde. ;)

Bestimmte maximale und minimale Länge wird nicht unterstützt und wird wahrscheinlich nicht implementiert (aber wer weiß). E-Mail, Telefon und alles, was per Regex überprüft werden kann. Siehe das Beispiel auf der Github-Seite, das ein (einfaches) Regex-Beispiel enthält.

Tor Valamo
quelle
0

Ich empfehle Valida, es fehlt an Dokumentation, aber es ist ziemlich einfach zu verstehen, wenn man sich die Beispiele ansieht .

Valida-Funktionen sind:

  • Desinfektion
  • Synchrone und asynchrone Validierung
  • Gruppen
  • Erweiterbar
Eduardo Nunes
quelle
-1

Ich bin mit dem Schreiben einer Bibliothek über Javascript-Validierungen fertig (sowohl Knoten als auch Browser). Ich werde die Dokumente in den nächsten Tagen schreiben, aber der Code ist fast fertig: https://github.com/wilkerlucio/composed-validations

Bitte lassen Sie mich wissen, wenn Sie Fragen / Anregungen dazu haben :)

Wilker Lucio
quelle