-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathFormValidation.min.js
5 lines (5 loc) · 2.43 KB
/
FormValidation.min.js
1
2
3
4
5
function FormValidation(k){function l(){for(var d=!0,g=0;g<h.length;++g)for(var a=h[g],b=0;b<a.validation.length;++b){var f=q(a.validation[b],a);if("good"===f)n(a.status_id,"Good","success"),a.field.className="",a.valid=!0;else{n(a.status_id,f,"error");a.field.className="error";d=!1;a.valid=!1;break}}r.disabled=!d}function q(d,g){var a=d.split(":"),b=g.field.value.trim();switch(a[0]){case "len":var f=parseInt(a[1].split("-")[0]),c=parseInt(a[1].split("-")[1]);if(b.length<f)return"Must be longer than "+
(f-1)+" characters";if(b.length>c)return"Must be shorter than "+(c+1)+" characters";break;case "regex":if(!t[a[1]].test(b)){if("email"==a[1]){if(0==b.length)break;return"Not a valid email address"}return"Contains invalid characters"}break;case "match":if(b!=k.querySelector("[name='"+a[1]+"']").value)return"Does not match";break;case "req":if(0===b.length)return"Required";break;case "select-req":if(0===g.field.selectedIndex)return"Required";break;case "checkbox":for(var f=parseInt(a[2].split("-")[0]),
c=parseInt(a[2].split("-")[1]),b=k.querySelectorAll("[name='"+a[1]+"']"),e=a=0;e<b.length;++e)b[e].checked&&++a;if(0===a&&0<f)return"Required";if(a<f)return"Select at least "+f;if(a>c)return"Select "+c+" at most";break;case "radio":b=k.querySelectorAll("[name='"+a[1]+"']");for(e=a=0;e<b.length;++e)b[e].checked&&++a;if(1!=a)return"Required";break;case "or":for(e=0;e<h.length;++e)h[e].field.name===a[1]&&(f=h[e]);e=f.field.value.trim().length;if(0==b.length&&0==e||!f.valid&&0!=e)return"Either this or "+
a[2]+" must be filled in"}return"good"}function n(d,c,a){d=document.querySelector(d);d.innerHTML="success"===a?'<i class="fa fa-check"></i> '+c:'<i class="fa fa-times"></i> '+c;d.className=d.className.replace(" status-success","");d.className=d.className.replace(" status-error","");d.className+=" status-"+a;d.style.visibility="visible"}for(var t={letters:/^[a-zA-Z]*$/,name:/^[a-zA-Z \-']*$/,username:/^[a-zA-Z0-9_\.!?-]*$/,numbers:/^[0-9]*$/,phone:/^[0-9 \-+]*$/,date:/^\d{4}-\d{2}-\d{2}$/,email:/[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/},
r=k.querySelector('[type="submit"]'),p=k.querySelectorAll("[data-validation]"),h=[],m=0;m<p.length;++m){var c=p[m],u={field:c,status_id:"#"+c.name+"-status",validation:c.attributes["data-validation"].value.split(" "),valid:!1};"checkbox"!=c.type&&"radio"!=c.type&&(c.oninput=l);c.onchange=l;h.push(u)}window.onload=function(){l()}};