Skip to content

Instantly share code, notes, and snippets.

@Uunknownn
Last active April 23, 2017 18:08
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Uunknownn/a4af5e57dd31952229473783d9789ed3 to your computer and use it in GitHub Desktop.
Save Uunknownn/a4af5e57dd31952229473783d9789ed3 to your computer and use it in GitHub Desktop.
Le Amateur JQuery Form Validator Plugin

Le Amateur jQuery Form Validator Plugin (Demo)

Just link the script to your website, right after the jQuery

<script src="jquery.min.js"></script>
<script src="validator.min.js"></script>

Pass the submitted data through the validator

$('#loginForm').on('submit', function(e) {
  e.preventDefault();

  $(this).validate([
    {
      name: 'uname',
      display: 'user name',
      rules: 'required|alpha_num|nospace|len[6,16]'
    },
    {
      name: 'upass',
      display: 'user password',
      rules: 'required|match[uname]|alpha_num'
    },
    {
      name: 'umail',
      display: 'user email',
      rules: 'required|email|len[10,32]'
    },
    {
      name: 'umsg',
      display: 'user important message',
      rules: 'required|len[6,255]|special|nospace'
    }
  ], function(data) {
    console.log(data.success); // returns 0 if submit fails and 1 if success
    console.log(data.msg); // returns the submit response
  })

});

valid filters

filter name rule
required field required
set length (min and max or exact) len[min,max] or len[exactly]
alphabetic characters only alpha
alpha+numeric characters only alpha_num
integer number only int
real number only real
positive number only pos
valid email address email
match selected field match[field_name]
all common + special characters allowed (!@#$%&*) special
number inside the given range range[min,max]
no spaces or linebreaks allowed nospace
/*
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
**
** Le Amateur jQuery Form Validator Plugin
** build 1.3.0 (23, Apr 2017)
** © Pedro Fernandes
**
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
*/
$.fn.extend({
validate: function(data, callback) {
'use strict';
// REMOVE WHITE SPACE
String.prototype.remWS = function() {
return this.replace(/ /g, '').trim();
};
// SINGLE WHITE SPACE
String.prototype.sinWS = function() {
return this.replace(/[ ]+/g, ' ').trim();
};
// REMOVE SIGNAL
String.prototype.remSN = function() {
return this.replace(/[\+]/g, '');
};
var alerts = {
required: function(display) {
return 'The <strong>' + display + '</strong> field is required.';
},
length: function(display, min, max, given) {
return 'The <strong>' + display + '</strong> field must contain between ' + min + ' and ' + max + ' characters. ' + given + ' given.';
},
exact_len: function(display, len, given) {
return 'The <strong>' + display + '</strong> field must contain exactly ' + len + ' characters. ' + given + ' given.';
},
alpha: function(display) {
return 'The <strong>' + display + '</strong> field can contain alpha characters only.';
},
int: function(display) {
return 'The <strong>' + display + '</strong> field must contain an integer number.';
},
real: function(display) {
return 'The <strong>' + display + '</strong> field must contain a real number.';
},
pos: function(display) {
return 'The <strong>' + display + '</strong> field must contain a positive number.';
},
alphanum: function(display) {
return 'The <strong>' + display + '</strong> field can contain alpha-numeric characters only.';
},
email: function(display) {
return 'The <strong>' + display + '</strong> field must contain an valid email address.';
},
match: function(display) {
return 'The <strong>' + display + '</strong> field doesn\'t match the required field.';
},
special: function(display) {
return 'The <strong>' + display + '</strong> field can contain alpha-numeric & common special characters only.';
},
range: function(display, min, max, given) {
return 'The <strong>' + display + '</strong> field must contain a number between ' + min + ' an ' + max + '. ' + given + ' given.';
},
nospace: function(display) {
return 'The <strong>' + display + '</strong> field can not contain white-spaces or linebreaks.';
}
};
var fields = [];
var displays = [];
var rules = [];
for (var x in this[0].elements) {
for (var i in data) {
if (data[i].name === this[0].elements[x].name && fields.indexOf(this[0].elements[x]) === -1) {
fields.push(this[0].elements[x]);
displays.push(data[i].display);
rules.push(data[i].rules.split('|'));
}
}
}
// PERFORM THE VALIDATOR
for (var i in fields) {
//-----------------------
// REQUIRED (required)
//-----------------------
for (var x in rules[i]) {
if (rules[i][x] === 'required' && fields[i].value.remWS() === '') {
$(fields[i]).val(fields[i].value.remWS());
$(fields[i]).focus();
$(fields[i]).parent().addClass('has-error');
$(fields[i]).next().html(alerts.required(displays[i]));
if (callback) callback({success: 0, msg: alerts.required(displays[i])});
return false;
} else {
$(fields[i]).parent().removeClass('has-error');
$(fields[i]).next().html('');
};
}
//-----------------------
// ALPHA (alpha)
//-----------------------
for (var x in rules[i]) {
if (rules[i][x] === 'alpha' && /[^\n a-zãõñâêîôûáéíóúàèìòùäëïöüç]/i.test(fields[i].value)) {
$(fields[i]).focus();
$(fields[i]).parent().addClass('has-error');
$(fields[i]).next().html(alerts.alpha(displays[i]));
if (callback) callback({success: 0, msg: alerts.alpha(displays[i])});
return false;
} else {
$(fields[i]).parent().removeClass('has-error');
$(fields[i]).next().html('');
};
}
//-----------------------
// ALPHA-NUM (alpha_num)
//-----------------------
for (var x in rules[i]) {
if (rules[i][x] === 'alpha_num' && /[^\n a-z0-9ãõñâêîôûáéíóúàèìòùäëïöüç]/i.test(fields[i].value)) {
$(fields[i]).focus();
$(fields[i]).parent().addClass('has-error');
$(fields[i]).next().html(alerts.alphanum(displays[i]));
if (callback) callback({success: 0, msg: alerts.alphanum(displays[i])});
return false;
} else {
$(fields[i]).parent().removeClass('has-error');
$(fields[i]).next().html('');
};
}
//-----------------------
// SPECIAL (special)
//-----------------------
for (var x in rules[i]) {
if (rules[i][x] === 'special' && /[^\n 0-9a-zãõñâêîôûáéíóúàèìòùäëïöüç_\-!@#$%&*]+/i.test(fields[i].value)) {
$(fields[i]).focus();
$(fields[i]).parent().addClass('has-error');
$(fields[i]).next().html(alerts.special(displays[i]));
if (callback) callback({success: 0, msg: alerts.special(displays[i])});
return false;
} else {
$(fields[i]).parent().removeClass('has-error');
$(fields[i]).next().html('');
};
}
//-----------------------
// NO-SPACES (nospace)
//-----------------------
for (var x in rules[i]) {
if (rules[i][x] === 'nospace' && /[ \n]+/i.test(fields[i].value)) {
$(fields[i]).focus();
$(fields[i]).parent().addClass('has-error');
$(fields[i]).next().html(alerts.nospace(displays[i]));
if (callback) callback({success: 0, msg: alerts.nospace(displays[i])});
return false;
} else {
$(fields[i]).parent().removeClass('has-error');
$(fields[i]).next().html('');
};
}
//-----------------------
// INTEGER (int)
//-----------------------
for (var x in rules[i]) {
if (rules[i][x] === 'int' && /[^\-+0-9]/i.test(fields[i].value)) {
$(fields[i]).focus();
$(fields[i]).parent().addClass('has-error');
$(fields[i]).next().html(alerts.int(displays[i]));
if (callback) callback({success: 0, msg: alerts.int(displays[i])});
return false;
} else {
fields[i].value = fields[i].value.remSN();
$(fields[i]).parent().removeClass('has-error');
$(fields[i]).next().html('');
};
}
//-----------------------
// REAL (real)
//-----------------------
for (var x in rules[i]) {
if (rules[i][x] === 'real' && !/^([\-+0-9]+)([.0-9])([0-9]+)$/.test(fields[i].value)) {
$(fields[i]).focus();
$(fields[i]).parent().addClass('has-error');
$(fields[i]).next().html(alerts.real(displays[i]));
if (callback) callback({success: 0, msg: alerts.real(displays[i])});
return false;
} else {
fields[i].value = fields[i].value.remSN();
$(fields[i]).parent().removeClass('has-error');
$(fields[i]).next().html('');
};
}
//-----------------------
// POSITIVE (pos)
//-----------------------
for (var x in rules[i]) {
if (rules[i][x] === 'pos' && !/^([+0-9.]+)$/i.test(fields[i].value)) {
$(fields[i]).focus();
$(fields[i]).parent().addClass('has-error');
$(fields[i]).next().html(alerts.pos(displays[i]));
if (callback) callback({success: 0, msg: alerts.pos(displays[i])});
return false;
} else {
$(fields[i]).parent().removeClass('has-error');
$(fields[i]).next().html('');
};
}
//-----------------------
// EMAIL (email)
//-----------------------
for (var x in rules[i]) {
if (rules[i][x] === 'email' && !/^([\w\-\.]+)@([\a-z0-9\.-]+)([a-z0-9]{2,3})$/i.test(fields[i].value)) {
$(fields[i]).focus();
$(fields[i]).parent().addClass('has-error');
$(fields[i]).next().html(alerts.email(displays[i]));
if (callback) callback({success: 0, msg: alerts.email(displays[i])});
return false;
} else {
$(fields[i]).parent().removeClass('has-error');
$(fields[i]).next().html('');
};
}
//-----------------------
// MATCH (match[name])
//-----------------------
for (var x in rules[i]) {
if (/match/.test(rules[i][x])) {
var _match = rules[i][x].match(/(?:\[)([a-z0-9\-_]+)/i)[1].toString();
var _required = document.getElementsByName(_match)[0].value;
if (fields[i].value !== _required) {
$(fields[i]).focus();
$(fields[i]).parent().addClass('has-error');
$(fields[i]).next().html(alerts.match(displays[i]));
if (callback) callback({success: 0, msg: alerts.match(displays[i])});
return false;
} else {
$(fields[i]).parent().removeClass('has-error');
$(fields[i]).next().html('');
};
}
}
//-----------------------
// LENGTH (len[min,max] or len[exactly])
//-----------------------
for (var x in rules[i]) {
if (/len/.test(rules[i][x])) {
var _range = rules[i][x].match(/(\d+)/g);
var _given = fields[i].value.sinWS().length;
if (_range[1] === undefined && _given != _range[0]) {
$(fields[i]).focus();
fields[i].value = fields[i].value.sinWS();
$(fields[i]).parent().addClass('has-error');
$(fields[i]).next().html(alerts.exact_len(displays[i], _range[0], _given));
if (callback) callback({success: 0, msg: alerts.exact_len(displays[i], _range[0], _given)});
return false;
} else {
fields[i].value = fields[i].value.sinWS();
$(fields[i]).parent().removeClass('has-error');
$(fields[i]).next().html('');
}
if (_given < _range[0] || _given > _range[1]) {
$(fields[i]).focus();
fields[i].value = fields[i].value.sinWS();
$(fields[i]).parent().addClass('has-error');
$(fields[i]).next().html(alerts.length(displays[i], _range[0], _range[1], _given));
if (callback) callback({success: 0, msg: alerts.length(displays[i], _range[0], _range[1], _given)});
return false;
} else {
fields[i].value = fields[i].value.sinWS();
$(fields[i]).parent().removeClass('has-error');
$(fields[i]).next().html('');
};
}
}
//-----------------------
// RANGE (range[min,max])
//-----------------------
for (var x in rules[i]) {
if (/range/.test(rules[i][x])) {
var _range = rules[i][x].match(/(\d+)/g);
var _given = parseFloat(fields[i].value);
if (_given < parseFloat(_range[0]) || _given > parseFloat(_range[1])) {
$(fields[i]).focus();
$(fields[i]).parent().addClass('has-error');
$(fields[i]).next().html(alerts.range(displays[i], _range[0], _range[1], _given));
if (callback) callback({success: 0, msg: alerts.range(displays[i], _range[0], _range[1], _given)});
return false;
} else {
$(fields[i]).parent().removeClass('has-error');
$(fields[i]).next().html('');
};
}
}
}
if (callback) callback({
success: 1,
msg: 'submitted successfully!'
});
}
});
/*
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
**
** Le Amateur jQuery Form Validator Plugin
** build 1.3.0 (23, Apr 2017)
** © Pedro Fernandes
**
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
*/
$.fn.extend({validate:function(a,b){"use strict";String.prototype.remWS=function(){return this.replace(/ /g,"").trim()},String.prototype.sinWS=function(){return this.replace(/[ ]+/g," ").trim()},String.prototype.remSN=function(){return this.replace(/[\+]/g,"")};var c={required:function(a){return"The <strong>"+a+"</strong> field is required."},length:function(a,b,c,d){return"The <strong>"+a+"</strong> field must contain between "+b+" and "+c+" characters. "+d+" given."},exact_len:function(a,b,c){return"The <strong>"+a+"</strong> field must contain exactly "+b+" characters. "+c+" given."},alpha:function(a){return"The <strong>"+a+"</strong> field can contain alpha characters only."},int:function(a){return"The <strong>"+a+"</strong> field must contain an integer number."},real:function(a){return"The <strong>"+a+"</strong> field must contain a real number."},pos:function(a){return"The <strong>"+a+"</strong> field must contain a positive number."},alphanum:function(a){return"The <strong>"+a+"</strong> field can contain alpha-numeric characters only."},email:function(a){return"The <strong>"+a+"</strong> field must contain an valid email address."},match:function(a){return"The <strong>"+a+"</strong> field doesn't match the required field."},special:function(a){return"The <strong>"+a+"</strong> field can contain alpha-numeric & common special characters only."},range:function(a,b,c,d){return"The <strong>"+a+"</strong> field must contain a number between "+b+" an "+c+". "+d+" given."},nospace:function(a){return"The <strong>"+a+"</strong> field can not contain white-spaces or linebreaks."}},d=[],e=[],f=[];for(var g in this[0].elements)for(var h in a)a[h].name===this[0].elements[g].name&&-1===d.indexOf(this[0].elements[g])&&(d.push(this[0].elements[g]),e.push(a[h].display),f.push(a[h].rules.split("|")));for(var h in d){for(var g in f[h]){if("required"===f[h][g]&&""===d[h].value.remWS())return $(d[h]).val(d[h].value.remWS()),$(d[h]).focus(),$(d[h]).parent().addClass("has-error"),$(d[h]).next().html(c.required(e[h])),b&&b({success:0,msg:c.required(e[h])}),!1;$(d[h]).parent().removeClass("has-error"),$(d[h]).next().html("")}for(var g in f[h]){if("alpha"===f[h][g]&&/[^\n a-zãõñâêîôûáéíóúàèìòùäëïöüç]/i.test(d[h].value))return $(d[h]).focus(),$(d[h]).parent().addClass("has-error"),$(d[h]).next().html(c.alpha(e[h])),b&&b({success:0,msg:c.alpha(e[h])}),!1;$(d[h]).parent().removeClass("has-error"),$(d[h]).next().html("")}for(var g in f[h]){if("alpha_num"===f[h][g]&&/[^\n a-z0-9ãõñâêîôûáéíóúàèìòùäëïöüç]/i.test(d[h].value))return $(d[h]).focus(),$(d[h]).parent().addClass("has-error"),$(d[h]).next().html(c.alphanum(e[h])),b&&b({success:0,msg:c.alphanum(e[h])}),!1;$(d[h]).parent().removeClass("has-error"),$(d[h]).next().html("")}for(var g in f[h]){if("special"===f[h][g]&&/[^\n 0-9a-zãõñâêîôûáéíóúàèìòùäëïöüç_\-!@#$%&*]+/i.test(d[h].value))return $(d[h]).focus(),$(d[h]).parent().addClass("has-error"),$(d[h]).next().html(c.special(e[h])),b&&b({success:0,msg:c.special(e[h])}),!1;$(d[h]).parent().removeClass("has-error"),$(d[h]).next().html("")}for(var g in f[h]){if("nospace"===f[h][g]&&/[ \n]+/i.test(d[h].value))return $(d[h]).focus(),$(d[h]).parent().addClass("has-error"),$(d[h]).next().html(c.nospace(e[h])),b&&b({success:0,msg:c.nospace(e[h])}),!1;$(d[h]).parent().removeClass("has-error"),$(d[h]).next().html("")}for(var g in f[h]){if("int"===f[h][g]&&/[^\-+0-9]/i.test(d[h].value))return $(d[h]).focus(),$(d[h]).parent().addClass("has-error"),$(d[h]).next().html(c.int(e[h])),b&&b({success:0,msg:c.int(e[h])}),!1;d[h].value=d[h].value.remSN(),$(d[h]).parent().removeClass("has-error"),$(d[h]).next().html("")}for(var g in f[h]){if("real"===f[h][g]&&!/^([\-+0-9]+)([.0-9])([0-9]+)$/.test(d[h].value))return $(d[h]).focus(),$(d[h]).parent().addClass("has-error"),$(d[h]).next().html(c.real(e[h])),b&&b({success:0,msg:c.real(e[h])}),!1;d[h].value=d[h].value.remSN(),$(d[h]).parent().removeClass("has-error"),$(d[h]).next().html("")}for(var g in f[h]){if("pos"===f[h][g]&&!/^([+0-9.]+)$/i.test(d[h].value))return $(d[h]).focus(),$(d[h]).parent().addClass("has-error"),$(d[h]).next().html(c.pos(e[h])),b&&b({success:0,msg:c.pos(e[h])}),!1;$(d[h]).parent().removeClass("has-error"),$(d[h]).next().html("")}for(var g in f[h]){if("email"===f[h][g]&&!/^([\w\-\.]+)@([\a-z0-9\.-]+)([a-z0-9]{2,3})$/i.test(d[h].value))return $(d[h]).focus(),$(d[h]).parent().addClass("has-error"),$(d[h]).next().html(c.email(e[h])),b&&b({success:0,msg:c.email(e[h])}),!1;$(d[h]).parent().removeClass("has-error"),$(d[h]).next().html("")}for(var g in f[h])if(/match/.test(f[h][g])){var i=f[h][g].match(/(?:\[)([a-z0-9\-_]+)/i)[1].toString(),j=document.getElementsByName(i)[0].value;if(d[h].value!==j)return $(d[h]).focus(),$(d[h]).parent().addClass("has-error"),$(d[h]).next().html(c.match(e[h])),b&&b({success:0,msg:c.match(e[h])}),!1;$(d[h]).parent().removeClass("has-error"),$(d[h]).next().html("")}for(var g in f[h])if(/len/.test(f[h][g])){var k=f[h][g].match(/(\d+)/g),l=d[h].value.sinWS().length;if(void 0===k[1]&&l!=k[0])return $(d[h]).focus(),d[h].value=d[h].value.sinWS(),$(d[h]).parent().addClass("has-error"),$(d[h]).next().html(c.exact_len(e[h],k[0],l)),b&&b({success:0,msg:c.exact_len(e[h],k[0],l)}),!1;if(d[h].value=d[h].value.sinWS(),$(d[h]).parent().removeClass("has-error"),$(d[h]).next().html(""),l<k[0]||l>k[1])return $(d[h]).focus(),d[h].value=d[h].value.sinWS(),$(d[h]).parent().addClass("has-error"),$(d[h]).next().html(c.length(e[h],k[0],k[1],l)),b&&b({success:0,msg:c.length(e[h],k[0],k[1],l)}),!1;d[h].value=d[h].value.sinWS(),$(d[h]).parent().removeClass("has-error"),$(d[h]).next().html("")}for(var g in f[h])if(/range/.test(f[h][g])){var k=f[h][g].match(/(\d+)/g),l=parseFloat(d[h].value);if(l<parseFloat(k[0])||l>parseFloat(k[1]))return $(d[h]).focus(),$(d[h]).parent().addClass("has-error"),$(d[h]).next().html(c.range(e[h],k[0],k[1],l)),b&&b({success:0,msg:c.range(e[h],k[0],k[1],l)}),!1;$(d[h]).parent().removeClass("has-error"),$(d[h]).next().html("")}}b&&b({success:1,msg:"submitted successfully!"})}});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment