dist/string-validate.js
File
//= require 'vendor/node_modules/@absolunet/kafe/dist/string'
(function(global, undefined) { var kafe = global.kafe, $ = kafe.dependencies.jQuery; kafe.bonify({name:'string.validate', version:'1.0.0', obj:(function(){
/**
* ### Version 1.0.0
* String validation tools.
*
* @module kafe
* @class kafe.string.validate
* @extensionfor kafe.string
*/
var validate = {};
/**
* Checks if a string is numeric.
*
* @method isNum
* @param {String} string
* @return {Boolean} If true, the string could be converted to a number.
* @example
* kafe.string.validate.isNum('k4f3');
* // returns false
* @example
* kafe.string.validate.isNum('43');
* // returns true
*/
validate.isNum = function(str) {
return (str === Number(str).toString());
};
/**
* Checks if a string is a valid email address.
*
* @method isEmail
* @param {String} string
* @return {Boolean} If true, the string is a valid email address.
* @example
* kafe.string.validate.isEmail('mailbox@mailaddress');
* // returns false
* @example
* kafe.string.validate.isEmail('kafe.feedback@absolunet.com');
* // returns true
*/
validate.isEmail = function(str) {
str = str.replace(/^\s*|\s*$/g, '');
str = str.replace(/^\t*|\t*$/g, '');
// Practical implementation of RFC 5322
// https://www.regular-expressions.info/email.html
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])?$/.test(str));
};
/**
* Checks if a string is a valid or part of a valid Canadian postal code.
*
* @method isPostalCode
* @param {String} string
* @param {String} [format] Validation pattern (Regular expression). Default pattern is *([a-z][0-9]){3}*. Can also be set to *A1A 1A1* for a single precise value or as *A1A* and *1A1* when divided into two values.
* @return {Boolean} If true, the string matches the validation format.
* @example
* kafe.string.validate.isPostalCode('KAF123');
* // returns false
* @example
* kafe.string.validate.isPostalCode('K4F 3F3', 'A1A 1A1');
* // returns true
*/
validate.isPostalCode = function(str,format) {
switch (format) {
case 'A1A 1A1': format='[a-z][0-9][a-z] [0-9][a-z][0-9]'; break;
case 'A1A': format='[a-z][0-9][a-z]'; break;
case '1A1': format='[0-9][a-z][0-9]'; break;
default: format='([a-z][0-9]){3}'; break;
}
return new RegExp('^'+format+'$','i').test(str);
};
/**
* Checks if a string passes the Luhn algorithm.
*
* Source: [https://gist.github.com/2134376](https://gist.github.com/2134376)
* Source: [http://jsperf.com/credit-card-validator/7](http://jsperf.com/credit-card-validator/7)
*
* @method isLuhnAlgorithm
* @param {String} string
* @return {Boolean} If true, the string passes the Luhn algorithm.
* @example
* kafe.string.validate.isLuhn('79927398713');
* // returns true
*/
validate.isLuhnAlgorithm = function(str) {
var
len = str.length,
mul = 0,
prodArr = [[0,1,2,3,4,5,6,7,8,9],[0,2,4,6,8,1,3,5,7,9]],
sum = 0
;
while (len--) {
sum += prodArr[mul][parseInt(str.charAt(len), 10)];
mul ^= 1;
}
return sum % 10 === 0 && sum > 0;
};
/**
* Checks if a string is a valid credit card number and fits a specific brand pattern.
*
* Source: [http://www.regular-expressions.info/creditcard.html](http://www.regular-expressions.info/creditcard.html)
*
* @method isCreditCard
* @param {String} string
* @param {String} creditcard A credit card brand abbreviation. Possible values are **visa**, **mastercard**, **americanexpress**, **dinersclub**, **discover**, **jcb**.
* @return {Boolean} If true, the string is a valid credit card number.
* @example
* kafe.string.validate.isCreditCard('k789 kafe 3789', 'mc');
* // returns false
* @example
* kafe.string.validate.isCreditCard('1234 5678 1234 5678', 'vi');
* // returns true
*/
validate.isCreditCard = function(str,cc) {
str = str.replace(/[\s\-]/g, '');
var pattern = {
visa: '4[0-9]{12}([0-9]{3})?',
mastercard: '5[1-5][0-9]{14}',
americanexpress: '3[47][0-9]{13}',
dinersclub: '3(?:0[0-5]|[68][0-9])[0-9]{11}',
discover: '6(?:011|5[0-9]{2})[0-9]{12}'
};
return validate.isLuhnAlgorithm(str) && new RegExp('^'+pattern[cc]+'$','i').test(str);
};
return validate;
})()}); })(typeof window !== 'undefined' ? window : this);