UNPKG

validator-lite

Version:

Lightweight Form Validation (no dependencies)

1 lines 3.13 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Validator=t()}(this,function(){"use strict";function e(){}function t(e,t){return this.opts=s({},r,e),this.methods=s({},n,t),this.attach(this.opts.form),this}var s=function(e){var t;e=e||{};for(var s=1;s<arguments.length;s++){t=Object(arguments[s]);for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])}return e},r={rules:{},form:null,hijack:!0,fieldClass:"field",errorClass:"error",defaultMsg:"Required",onFail:e,onPass:e},n={minLength:function(e,t){return!(e.length>=t)&&"Please enter at least "+t+" characters"},maxLength:function(e,t){return!(e.length<=t)&&"Please enter "+t+" characters or less"},btwLength:function(e,t){return n.minLength(e,t[0])||n.maxLength(e,t[1])||!1},equals:function(e,t){return e!==t&&"These values do not match"},email:function(e){return!/^[a-z0-9+_-]+(?:\.[a-z0-9+_-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(e)&&"Please provide a valid email address"},url:function(e){return!/((https?):\/\/)+(www\.)?[^\s\.]+\.[^\s]{2,}/gi.test(e)&&"Please provide a valid URL."},password:function(e,t){return t=s({min:8,upp:!0,low:!0,sym:!0},t),e.length<t.min?"Password must be at least "+t.min+" characters":t.upp&&!/^(?=.*[A-Z]).*$/.test(e)?"Password must contain at least one uppercase letter":t.low&&!/^(?=.*[a-z]).*$/.test(e)?"Password must contain at least one lowercase letter":!(!t.sym||/^(?=.*[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]).*$/.test(e))&&"Password must contain at least one symbol"}};return t.prototype={attach:function(e){var t=this.opts,s=this;(s.form=e)&&t.hijack&&(s.form.onsubmit=function(r){return r.preventDefault(),s.checkAll(this)?t.onFail(e):t.onPass(e)})},checkAll:function(e){var t=this;if(t.inputs=[],t.hasErrors=0,t.form=e||t.form,!t.form)throw new Error("Must have a `<form>` to process!");var s=[].slice.call(t.form.elements),r=t.opts.rules;return s.length&&s.forEach(function(e){e.rules=e.rules||r[e.name],e.rules&&(t.inputs.push(e),t.hasErrors=t.checkOne(e)||t.hasErrors||0)}),t.hasErrors},checkOne:function(e,t){t=t||e.rules||{};var s=this.getValue(e),r=this.getField(e,this.form),n="",a=0,o=!!e.required||t.required,i="function"==typeof t.test?t.test:this.methods[t.test];if(o&&!s.length)n=t.message||this.opts.defaultMsg;else if(s.length&&i){var u="function"==typeof t.arg?t.arg():t.arg;n=i.apply(e,[s,u])}return a=!!n,r.status={error:a,message:n},this.setError(r),a},getField:function(e,t){for(var s=new RegExp(this.opts.fieldClass,"i");(e=e.parentNode)&&!s.test(e.className)&&e!==t;);return e},getValue:function(e){return this.form.elements[e.name].value},setError:function(e,t){t=t||0;var s=e.status.error,r=this.opts.errorClass,n=e.getElementsByClassName(r)[0];!t&&s||!n?s&&n?n.innerText=e.status.message:s&&!n&&(n=document.createElement("span"),n.className=r,n.innerText=e.status.message,e.appendChild(n),e.classList.add(r)):(e.classList.remove(r),e.removeChild(n))},reset:function(){var e=this;e.inputs&&e.inputs.forEach(function(t){var s=e.getField(t,e.form);s.status={error:0},e.setError(s,1)})}},t});