forked from validatorjs/validator.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
validator-min.js
23 lines (23 loc) · 17.2 KB
/
validator-min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*!
* Copyright (c) 2010 Chris O'Hara <cohara87@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
(function(exports){var entities={" ":" ","¡":"¡","¢":"¢","£":"£","¤":"€","¥":"¥","¦":"Š","§":"§","¨":"š","©":"©","ª":"ª","«":"«","¬":"¬","­":"","®":"®","¯":"¯","°":"°","±":"±","²":"²","³":"³","´":"Ž","µ":"µ","¶":"¶","·":"·","¸":"ž","¹":"¹","º":"º","»":"»","¼":"Œ","½":"œ","¾":"Ÿ","¿":"¿","À":"À","Á":"Á","Â":"Â","Ã":"Ã","Ä":"Ä","Å":"Å","Æ":"Æ","Ç":"Ç","È":"È","É":"É","Ê":"Ê","Ë":"Ë","Ì":"Ì","Í":"Í","Î":"Î","Ï":"Ï","Ð":"Ð","Ñ":"Ñ","Ò":"Ò","Ó":"Ó","Ô":"Ô","Õ":"Õ","Ö":"Ö","×":"×","Ø":"Ø","Ù":"Ù","Ú":"Ú","Û":"Û","Ü":"Ü","Ý":"Ý","Þ":"Þ","ß":"ß","à":"à","á":"á","â":"â","ã":"ã","ä":"ä","å":"å","æ":"æ","ç":"ç","è":"è","é":"é","ê":"ê","ë":"ë","ì":"ì","í":"í","î":"î","ï":"ï","ð":"ð","ñ":"ñ","ò":"ò","ó":"ó","ô":"ô","õ":"õ","ö":"ö","÷":"÷","ø":"ø","ù":"ù","ú":"ú","û":"û","ü":"ü","ý":"ý","þ":"þ","ÿ":"ÿ",""":'"',"<":"<",">":">","'":"'","−":"−","ˆ":"ˆ","˜":"˜","Š":"Š","‹":"‹","Œ":"Œ","‘":"‘","’":"’","“":"“","”":"”","•":"•","–":"–","—":"—","™":"™","š":"š","›":"›","œ":"œ","Ÿ":"Ÿ","ƒ":"ƒ","Α":"Α","Β":"Β","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Ν":"Ν","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Υ":"Υ","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","π":"π","ρ":"ρ","ς":"ς","σ":"σ","τ":"τ","υ":"υ","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","ϑ":"ϑ","ϒ":"ϒ","ϖ":"ϖ"," ":" "," ":" "," ":" ","‌":"","‍":"","‎":"","‏":"","‚":"‚","„":"„","†":"†","‡":"‡","…":"…","‰":"‰","′":"′","″":"″","‾":"‾","⁄":"⁄","€":"€","ℑ":"ℑ","℘":"℘","ℜ":"ℜ","ℵ":"ℵ","←":"←","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","⇐":"⇐","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","∏":"∏","∑":"∑","∗":"∗","√":"√","∝":"∝","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","⋅":"⋅","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","⟨":"〈","⟩":"〉","◊":"◊","♠":"♠","♣":"♣","♥":"♥","♦":"♦"};var decode=function(str){if(!~str.indexOf("&"))return str;for(var i in entities){str=str.replace(new RegExp(i,"g"),entities[i])}str=str.replace(/&#x(0*[0-9a-f]{2,5});?/gi,function(m,code){return String.fromCharCode(parseInt(+code,16))});str=str.replace(/&#([0-9]{2,4});?/gi,function(m,code){return String.fromCharCode(+code)});str=str.replace(/&/g,"&");return str};var encode=function(str){str=str.replace(/&/g,"&");str=str.replace(/'/g,"'");for(var i in entities){str=str.replace(new RegExp(entities[i],"g"),i)}return str};exports.entities={encode:encode,decode:decode};var never_allowed_str={"document.cookie":"","document.write":"",".parentNode":"",".innerHTML":"","window.location":"","-moz-binding":"","<!--":"<!--","-->":"-->","<![CDATA[":"<![CDATA["};var never_allowed_regex={"javascript\\s*:":"","expression\\s*(\\(|&\\#40;)":"","vbscript\\s*:":"","Redirect\\s+302":""};var non_displayables=[/%0[0-8bcef]/g,/%1[0-9a-f]/g,/[\x00-\x08]/g,/\x0b/g,/\x0c/g,/[\x0e-\x1f]/g];var compact_words=["javascript","expression","vbscript","script","applet","alert","document","write","cookie","window"];exports.xssClean=function(str,is_image){if(typeof str==="object"){for(var i in str){str[i]=exports.xssClean(str[i])}return str}str=remove_invisible_characters(str);str=str.replace(/\&([a-z\_0-9]+)\=([a-z\_0-9]+)/i,xss_hash()+"$1=$2");str=str.replace(/(&\#?[0-9a-z]{2,})([\x00-\x20])*;?/i,"$1;$2");str=str.replace(/(&\#x?)([0-9A-F]+);?/i,"$1;$2");str=str.replace(xss_hash(),"&");try{str=decodeURIComponent(str)}catch(e){}str=str.replace(/[a-z]+=([\'\"]).*?\1/gi,function(m,match){return m.replace(match,convert_attribute(match))});str=remove_invisible_characters(str);str=str.replace(" "," ");var converted_string=str;for(var i in never_allowed_str){str=str.replace(i,never_allowed_str[i])}for(var i in never_allowed_regex){str=str.replace(new RegExp(i,"i"),never_allowed_regex[i])}for(var i in compact_words){var spacified=compact_words[i].split("").join("\\s*")+"\\s*";str=str.replace(new RegExp("("+spacified+")(\\W)","ig"),function(m,compat,after){return compat.replace(/\s+/g,"")+after})}do{var original=str;if(str.match(/<a/i)){str=str.replace(/<a\s+([^>]*?)(>|$)/gi,function(m,attributes,end_tag){attributes=filter_attributes(attributes.replace("<","").replace(">",""));return m.replace(attributes,attributes.replace(/href=.*?(alert\(|alert&\#40;|javascript\:|charset\=|window\.|document\.|\.cookie|<script|<xss|base64\s*,)/gi,""))})}if(str.match(/<img/i)){str=str.replace(/<img\s+([^>]*?)(\s?\/?>|$)/gi,function(m,attributes,end_tag){attributes=filter_attributes(attributes.replace("<","").replace(">",""));return m.replace(attributes,attributes.replace(/src=.*?(alert\(|alert&\#40;|javascript\:|charset\=|window\.|document\.|\.cookie|<script|<xss|base64\s*,)/gi,""))})}if(str.match(/script/i)||str.match(/xss/i)){str=str.replace(/<(\/*)(script|xss)(.*?)\>/gi,"")}}while(original!=str);event_handlers=["[^a-z_-]on\\w*"];if(!is_image){event_handlers.push("xmlns")}str=str.replace(new RegExp("<([^><]+?)("+event_handlers.join("|")+")(\\s*=\\s*[^><]*)([><]*)","i"),"<$1$4");naughty="alert|applet|audio|basefont|base|behavior|bgsound|blink|body|embed|expression|form|frameset|frame|head|html|ilayer|iframe|input|isindex|layer|link|meta|object|plaintext|style|script|textarea|title|video|xml|xss";str=str.replace(new RegExp("<(/*\\s*)("+naughty+")([^><]*)([><]*)","gi"),function(m,a,b,c,d){return"<"+a+b+c+d.replace(">",">").replace("<","<")});str=str.replace(/(alert|cmd|passthru|eval|exec|expression|system|fopen|fsockopen|file|file_get_contents|readfile|unlink)(\s*)\((.*?)\)/gi,"$1$2($3)");for(var i in never_allowed_str){str=str.replace(i,never_allowed_str[i])}for(var i in never_allowed_regex){str=str.replace(new RegExp(i,"i"),never_allowed_regex[i])}if(is_image&&str!==converted_string){throw new Error("Image may contain XSS")}return str};function remove_invisible_characters(str){for(var i in non_displayables){str=str.replace(non_displayables[i],"")}return str}function xss_hash(){return"!*$^#(@*#&"}function convert_attribute(str){return str.replace(">",">").replace("<","<").replace("\\","\\\\")}function filter_attributes(str){var comments=/\/\*.*?\*\//g;return str.replace(/\s*[a-z-]+\s*=\s*'[^']*'/gi,function(m){return m.replace(comments,"")}).replace(/\s*[a-z-]+\s*=\s*"[^"]*"/gi,function(m){return m.replace(comments,"")}).replace(/\s*[a-z-]+\s*=\s*[^\s]+/gi,function(m){return m.replace(comments,"")})}var Validator=exports.Validator=function(){};Validator.prototype.check=function(str,fail_msg){this.str=typeof str==="undefined"||str===null||isNaN(str)&&str.length===undefined?"":str+"";this.msg=fail_msg;this._errors=this._errors||[];return this};Validator.prototype.validate=Validator.prototype.check;Validator.prototype.assert=Validator.prototype.check;Validator.prototype.error=function(msg){throw new Error(msg)};Validator.prototype.isEmail=function(){if(!this.str.match(/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/)){return this.error(this.msg||"Invalid email")}return this};Validator.prototype.isCreditCard=function(){this.str=this.str.replace(/[^0-9]+/g,"");if(!this.str.match(/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/)){return this.error(this.msg||"Invalid credit card")}var sum=0;var digit;var tmpNum;var shouldDouble=false;for(var i=this.length-1;i>=0;i--){digit=this.substring(i,i+1);tmpNum=parseInt(digit,10);if(shouldDouble){tmpNum*=2;if(tmpNum>=10){sum+=tmpNum%10+1}else{sum+=tmpNum}}else{sum+=tmpNum}if(shouldDouble){shouldDouble=false}else{shouldDouble=true}}if(sum%10!==0){return this.error(this.msg||"Invalid credit card")}return this};Validator.prototype.isUrl=function(){if(!this.str.match(/^(?!mailto:)(?:(?:https?|ftp):\/\/)?(?:\S+(?::\S*)?@)?(?:(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))|localhost)(?::\d{2,5})?(?:\/[^\s]*)?$/i)||this.str.length>2083){return this.error(this.msg||"Invalid URL")}return this};Validator.prototype.isIP=function(){if(!this.str.match(/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/)){return this.error(this.msg||"Invalid IP")}return this};Validator.prototype.isAlpha=function(){if(!this.str.match(/^[a-zA-Z]+$/)){return this.error(this.msg||"Invalid characters")}return this};Validator.prototype.isAlphanumeric=function(){if(!this.str.match(/^[a-zA-Z0-9]+$/)){return this.error(this.msg||"Invalid characters")}return this};Validator.prototype.isNumeric=function(){if(!this.str.match(/^-?[0-9]+$/)){return this.error(this.msg||"Invalid number")}return this};Validator.prototype.isLowercase=function(){if(!this.str.match(/^[a-z0-9]+$/)){return this.error(this.msg||"Invalid characters")}return this};Validator.prototype.isUppercase=function(){if(!this.str.match(/^[A-Z0-9]+$/)){return this.error(this.msg||"Invalid characters")}return this};Validator.prototype.isInt=function(){if(!this.str.match(/^(?:-?(?:0|[1-9][0-9]*))$/)){return this.error(this.msg||"Invalid integer")}return this};Validator.prototype.isDecimal=function(){if(!this.str.match(/^(?:-?(?:0|[1-9][0-9]*))?(?:\.[0-9]*)?$/)){return this.error(this.msg||"Invalid decimal")}return this};Validator.prototype.isFloat=function(){return this.isDecimal()};Validator.prototype.notNull=function(){if(this.str===""){return this.error(this.msg||"Invalid characters")}return this};Validator.prototype.isNull=function(){if(this.str!==""){return this.error(this.msg||"Invalid characters")}return this};Validator.prototype.notEmpty=function(){if(this.str.match(/^[\s\t\r\n]*$/)){return this.error(this.msg||"String is whitespace")}return this};Validator.prototype.equals=function(equals){if(this.str!=equals){return this.error(this.msg||"Not equal")}return this};Validator.prototype.contains=function(str){if(this.str.indexOf(str)===-1){return this.error(this.msg||"Invalid characters")}return this};Validator.prototype.notContains=function(str){if(this.str.indexOf(str)>=0){return this.error(this.msg||"Invalid characters")}return this};Validator.prototype.regex=Validator.prototype.is=function(pattern,modifiers){if(Object.prototype.toString.call(pattern).slice(8,-1)!=="RegExp"){pattern=new RegExp(pattern,modifiers)}if(!this.str.match(pattern)){return this.error(this.msg||"Invalid characters")}return this};Validator.prototype.notRegex=Validator.prototype.not=function(pattern,modifiers){if(Object.prototype.toString.call(pattern).slice(8,-1)!=="RegExp"){pattern=new RegExp(pattern,modifiers)}if(this.str.match(pattern)){this.error(this.msg||"Invalid characters")}return this};Validator.prototype.len=function(min,max){if(this.str.length<min){return this.error(this.msg||"String is too small")}if(typeof max!==undefined&&this.str.length>max){return this.error(this.msg||"String is too large")}return this};Validator.prototype.isUUID=function(version){var pattern;if(version==3||version=="v3"){pattern=/[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i}else if(version==4||version=="v4"){pattern=/[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i}else{pattern=/[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i}if(!this.str.match(pattern)){return this.error(this.msg||"Not a UUID")}return this};Validator.prototype.isDate=function(){var intDate=Date.parse(this.str);if(isNaN(intDate)){return this.error(this.msg||"Not a date")}return this};Validator.prototype.isIn=function(options){if(options&&typeof options.indexOf==="function"){if(!~options.indexOf(this.str)){return this.error(this.msg||"Unexpected value")}return this}else{return this.error(this.msg||"Invalid in() argument")}};Validator.prototype.notIn=function(options){if(options&&typeof options.indexOf==="function"){if(options.indexOf(this.str)!==-1){return this.error(this.msg||"Unexpected value")}return this}else{return this.error(this.msg||"Invalid notIn() argument")}};Validator.prototype.min=function(val){var number=parseFloat(this.str);if(!isNaN(number)&&number<val){return this.error(this.msg||"Invalid number")}return this};Validator.prototype.max=function(val){var number=parseFloat(this.str);if(!isNaN(number)&&number>val){return this.error(this.msg||"Invalid number")}return this};Validator.prototype.isArray=function(){if(!Array.isArray(this.str)){return this.error(this.msg||"Not an array")}return this};var Filter=exports.Filter=function(){};var whitespace="\\r\\n\\t\\s";Filter.prototype.modify=function(str){this.str=str};Filter.prototype.convert=Filter.prototype.sanitize=function(str){this.str=str==null?"":str+"";return this};Filter.prototype.xss=function(is_image){this.modify(exports.xssClean(this.str,is_image));return this.str};Filter.prototype.entityDecode=function(){this.modify(decode(this.str));return this.str};Filter.prototype.entityEncode=function(){this.modify(encode(this.str));return this.str};Filter.prototype.ltrim=function(chars){chars=chars||whitespace;this.modify(this.str.replace(new RegExp("^["+chars+"]+","g"),""));return this.str};Filter.prototype.rtrim=function(chars){chars=chars||whitespace;this.modify(this.str.replace(new RegExp("["+chars+"]+$","g"),""));return this.str};Filter.prototype.trim=function(chars){chars=chars||whitespace;this.modify(this.str.replace(new RegExp("^["+chars+"]+|["+chars+"]+$","g"),""));return this.str};Filter.prototype.ifNull=function(replace){if(!this.str||this.str===""){this.modify(replace)}return this.str};Filter.prototype.toFloat=function(){this.modify(parseFloat(this.str));return this.str};Filter.prototype.toInt=function(radix){radix=radix||10;this.modify(parseInt(this.str,radix));return this.str};Filter.prototype.toBoolean=function(){if(!this.str||this.str=="0"||this.str=="false"||this.str==""){this.modify(false)}else{this.modify(true)}return this.str};Filter.prototype.toBooleanStrict=function(){if(this.str=="1"||this.str=="true"){this.modify(true)}else{this.modify(false)}return this.str};exports.sanitize=exports.convert=function(str){var filter=new exports.Filter;return filter.sanitize(str)};exports.check=exports.validate=exports.assert=function(str,fail_msg){var validator=new exports.Validator;return validator.check(str,fail_msg)}})(typeof exports==="undefined"?window:exports);