valide
Version:
Simple, chainable, multi lingual data validator
1 lines • 3.56 kB
JavaScript
function validValue(e){return!!(typeof e==='string'||typeof e==='number'||e)}var strings={en:{invalid_field:'Invalid field',required:'Field is required',include:'Field must include :value',exclude:'Field must exclude :value',be_equal:'Field must be equal to :value',not_be_equal:'Field must not be equal to :value',min_length:'Min char length is :length',max_length:'Max char length is :length',invalid_email:'Email is not valid'}},language={default:'en',current:'en'};function translateKey(e,n){var r=strings[language.current]||strings[language.default];r||console.warn(("[Valide] No keys for language \""+language.current+"\" found."));r&&!r[e]&&console.warn(("[Valide] No such key \""+e+"\" for language \""+language.current+"\" found."));return translateValue(strings[language.current][e],n)}function translateValue(e,n){n===void 0&&(n={});var r=Object.keys(n).map(function(e){return":"+e}).join('|');return e.replace(new RegExp(r,'g'),function(e){return n[e.substr(1)]||e})}var Valide=function(e){this.value=e;this.rules=[]},staticAccessors={language:{configurable:!0},version:{configurable:!0}};Valide.prototype.register=function(e){var n=this,r=e.type,t=e.validate,u=e.error,i=this.rules.push({type:r,validate:function(e){return validValue(e)&&t(e)},error:u||translateKey('invalid_field')});this.error=function(e,r){n.rules[i-1].error=e&&translateValue(e,r)||u;return n};return this};Valide.prototype.valueOf=function(){return this.check()};Valide.prototype.toString=function(){return this.check()};Valide.prototype.check=function(e){var n=this;typeof e!=='undefined'&&(this.value=e);return this.rules.reduce(function(e,r){return typeof e==='string'?e:!r.validate(n.value)&&r.error||e},!0)};Valide.prototype.required=function(){return this.register({type:'required',validate:function(e){return e!==''},error:translateKey('required')})};Valide.prototype.test=function(e){return this.register({type:'test',validate:function(n){return n===''||e.test(n)},error:translateKey('invalid_field')})};Valide.prototype.includes=function(e){return this.register({type:'includes',validate:function(n){return n===''||Array.isArray(n)&&n.indexOf(e)>=0||typeof n==='string'&&n.indexOf(e)>=0},error:translateKey('include',{value:e})})};Valide.prototype.excludes=function(e){return this.register({type:'excludes',validate:function(n){return n===''||Array.isArray(n)&&n.indexOf(e)<0||typeof n==='string'&&n.indexOf(e)<0},error:translateKey('exclude',{value:e})})};Valide.prototype.equal=function(e){return this.register({type:'equal',validate:function(n){return n===''||n+''===e+''},error:translateKey('be_equal',{value:e})})};Valide.prototype.notEqual=function(e){return this.register({type:'notEqual',validate:function(n){return n===''||n+''!==e+''},error:translateKey('not_be_equal',{value:e})})};Valide.prototype.min=function(e){return this.register({type:'min',validate:function(n){return n.length>=e},error:translateKey('min_length',{length:e})})};Valide.prototype.max=function(e){return this.register({type:'max',validate:function(n){return n.length<e},error:translateKey('max_length',{length:e})})};Valide.prototype.email=function(){return this.register({type:'email',validate:function(e){return e===''||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)},error:translateKey('invalid_email')})};staticAccessors.language.get=function(){return language.current};staticAccessors.language.set=function(e){return language.current=e};staticAccessors.version.get=function(){return'1.0.0'};Object.defineProperties(Valide,staticAccessors);window&&(window.Valide=Valide);export { Valide }