{
  "name": "validator",
  "description": "Data validation, filtering and sanitization for node.js",
  "version": "1.5.1",
  "homepage": "http://github.com/chriso/node-validator",
  "keywords": [
    "validator",
    "validation",
    "assert",
    "params",
    "sanitization",
    "xss",
    "entities",
    "sanitize",
    "sanitisation",
    "input"
  ],
  "author": {
    "name": "Chris O'Hara",
    "email": "cohara87@gmail.com"
  },
  "main": "./lib",
  "directories": {
    "lib": "./lib"
  },
  "bugs": {
    "url": "http://github.com/chriso/node-validator/issues"
  },
  "repository": {
    "type": "git",
    "url": "http://github.com/chriso/node-validator.git"
  },
  "contributors": [
    {
      "name": "PING"
    },
    {
      "name": "Dan VerWeire"
    },
    {
      "name": "Branko Vukelic"
    },
    {
      "name": "Mark Engel"
    }
  ],
  "scripts": {
    "test": "node test/run.js"
  },
  "engines": {
    "node": ">=0.2.2"
  },
  "licenses": [
    {
      "type": "MIT",
      "url": "http://github.com/chriso/node-validator/raw/master/LICENSE"
    }
  ],
  "readme": "**node-validator is a library of string validation, filtering and sanitization methods.**\n\nTo install node-validator, use [npm](http://github.com/isaacs/npm):\n\n```bash\n$ npm install validator\n```\n\nTo use the library in the browser, include `validator-min.js`\n\n## Example\n\n```javascript\nvar check = require('validator').check,\n    sanitize = require('validator').sanitize\n\n//Validate\ncheck('test@email.com').len(6, 64).isEmail();        //Methods are chainable\ncheck('abc').isInt();                                //Throws 'Invalid integer'\ncheck('abc', 'Please enter a number').isInt();       //Throws 'Please enter a number'\ncheck('abcdefghijklmnopzrtsuvqxyz').is(/^[a-z]+$/);\n\n//Set a message per validator\ncheck('foo', {\n    isNumeric: 'This is not a number',\n    contains: 'The value doesn\\'t have a 0 in it'\n}).isNumeric().contains('0');\n\n//Referencing validator args from the message\ncheck('foo', 'The message needs to be between %1 and %2 characters long (you passed \"%0\")').len(2, 6);\n\n//Sanitize / Filter\nvar int = sanitize('0123').toInt();                  //123\nvar bool = sanitize('true').toBoolean();             //true\nvar str = sanitize(' \\t\\r hello \\n').trim();         //'hello'\nvar str = sanitize('aaaaaaaaab').ltrim('a');         //'b'\nvar str = sanitize(large_input_str).xss();\nvar str = sanitize('&lt;a&gt;').entityDecode();      //'<a>'\n```\n\n## Web development\n\nOften it's more desirable to check or automatically sanitize parameters by name (rather than the actual string). See [this gist](https://gist.github.com/752126) for instructions on binding the library to the `request` prototype.\n\nIf you are using the [express.js framework](https://github.com/visionmedia/express) you can use the [express-validator middleware](https://github.com/ctavan/express-validator) to seamlessly integrate node-validator.\n\nExample `http://localhost:8080/?zip=12345&foo=1&textarea=large_string`\n\n```javascript\nget('/', function (req, res) {\n    req.onValidationError(function (msg) {\n        //Redirect the user with error 'msg'\n    });\n\n    //Validate user input\n    req.check('zip', 'Please enter a valid ZIP code').len(4,5).isInt();\n    req.check('email', 'Please enter a valid email').len(6,64).isEmail();\n    req.checkHeader('referer').contains('localhost');\n\n    //Sanitize user input\n    req.sanitize('textarea').xss();\n    req.sanitize('foo').toBoolean();\n\n    //etc.\n});\n```\n\n## An important note\n\nThis library validates **strings** only. If you pass something that's not a string as input it will be coerced to a string using the following rules:\n\n- Is it an object with a `toString` property? Call `input.toString()`\n- Is it `null`, `undefined`, or `NaN`? Replace with an empty string\n- All other input? Coerce to a string using `'' + input`\n\n## List of validation methods\n\n```javascript\nis()                            //Alias for regex()\nnot()                           //Alias for notRegex()\nisEmail()\nisUrl()                         //Accepts http, https, ftp\nisIP()                          //Combines isIPv4 and isIPv6\nisIPv4()\nisIPv6()\nisAlpha()\nisAlphanumeric()\nisNumeric()\nisHexadecimal()\nisHexColor()                    //Accepts valid hexcolors with or without # prefix\nisInt()                         //isNumeric accepts zero padded numbers, e.g. '001', isInt doesn't\nisLowercase()\nisUppercase()\nisDecimal()\nisFloat()                       //Alias for isDecimal\nnotNull()                       //Check if length is 0\nisNull()\nnotEmpty()                      //Not just whitespace (input.trim().length !== 0)\nequals(equals)\ncontains(str)\nnotContains(str)\nregex(pattern, modifiers)       //Usage: regex(/[a-z]/i) or regex('[a-z]','i')\nnotRegex(pattern, modifiers)\nlen(min, max)                   //max is optional\nisUUID(version)                 //Version can be 3, 4 or 5 or empty, see http://en.wikipedia.org/wiki/Universally_unique_identifier\nisUUIDv3()                      //Alias for isUUID(3)\nisUUIDv4()                      //Alias for isUUID(4)\nisUUIDv5()                      //Alias for isUUID(5)\nisDate()                        //Uses Date.parse() - regex is probably a better choice\nisAfter(date)                   //Argument is optional and defaults to today. Comparison is non-inclusive\nisBefore(date)                  //Argument is optional and defaults to today. Comparison is non-inclusive\nisIn(options)                   //Accepts an array or string\nnotIn(options)\nmax(val)\nmin(val)\nisCreditCard()                  //Will work against Visa, MasterCard, American Express, Discover, Diners Club, and JCB card numbering formats\n```\n\n## List of sanitization / filter methods\n\n```javascript\ntrim(chars)                     //Trim optional `chars`, default is to trim whitespace (\\r\\n\\t )\nltrim(chars)\nrtrim(chars)\nifNull(replace)\ntoFloat()\ntoInt()\ntoBoolean()                     //True unless str = '0', 'false', or str.length == 0\ntoBooleanStrict()               //False unless str = '1' or 'true'\nentityDecode()                  //Decode HTML entities\nentityEncode()\nescape()                        //Escape &, <, >, and \"\nxss()                           //Remove common XSS attack vectors from user-supplied HTML\nxss(true)                       //Remove common XSS attack vectors from images\n```\n\n## Extending the library\n\nWhen adding to the Validator prototype, use `this.str` to access the string and `this.error(this.msg || default_msg)` when the string is invalid\n\n```javascript\nvar Validator = require('validator').Validator;\nValidator.prototype.contains = function(str) {\n    if (!~this.str.indexOf(str)) {\n        this.error(this.msg || this.str + ' does not contain ' + str);\n    }\n    return this; //Allow method chaining\n}\n```\n\nWhen adding to the Filter (sanitize) prototype, use `this.str` to access the string and `this.modify(new_str)` to update it\n\n```javascript\nvar Filter = require('validator').Filter;\nFilter.prototype.removeNumbers = function() {\n    this.modify(this.str.replace(/[0-9]+/g, ''));\n    return this.str;\n}\n```\n\n## Error handling\n\nBy default, the validation methods throw an exception when a check fails\n\n```javascript\ntry {\n    check('abc').notNull().isInt()\n} catch (e) {\n    console.log(e.message); //Invalid integer\n}\n```\n\nTo set a custom error message, set the second param of `check()`\n\n```javascript\ntry {\n    check('abc', 'Please enter a valid integer').notNull().isInt()\n} catch (e) {\n    console.log(e.message); //Please enter a valid integer\n}\n```\n\nTo attach a custom error handler, set the `error` method of the validator instance\n\n```javascript\nvar Validator = require('validator').Validator;\nvar v = new Validator();\nv.error = function(msg) {\n    console.log('Fail');\n}\nv.check('abc').isInt(); //'Fail'\n```\n\nYou might want to collect errors instead of throwing each time\n\n```javascript\nValidator.prototype.error = function (msg) {\n    this._errors.push(msg);\n    return this;\n}\n\nValidator.prototype.getErrors = function () {\n    return this._errors;\n}\n\nvar validator = new Validator();\n\nvalidator.check('abc').isEmail();\nvalidator.check('hello').len(10,30);\n\nvar errors = validator.getErrors(); // ['Invalid email', 'String is too small']\n```\n\n## Contributors\n\n- [zero21xxx](https://github.com/zero21xxx) - Added per check messages\n- [PING](https://github.com/PlNG) - Fixed entity encoding\n- [Dan VerWeire](https://github.com/wankdanker) - Modified the behaviour of the error handler\n- [ctavan](https://github.com/ctavan) - Added isArray (since removed) and isUUID\n- [foxbunny](https://github.com/foxbunny) - Added min(), max(), isAfter(), isBefore(), and improved isDate()\n- [oris](https://github.com/orls) - Added in()\n- [mren](https://github.com/mren) - Decoupled rules\n- [Thorsten Basse](https://github.com/tbasse) - Cleanup and refinement of existing validators\n- [Neal Poole](https://github.com/nealpoole) - Port the latest xss() updates from CodeIgniter\n\n## LICENSE\n\n(MIT License)\n\nCopyright (c) 2010 Chris O'Hara <cohara87@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n",
  "readmeFilename": "README.md",
  "_id": "validator@1.5.1",
  "_from": "validator@~1.5.1"
}
