-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
99 lines (93 loc) · 2.31 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
'use strict';
module.exports = {
ok: ok,
email: checkEmail,
type: isType,
empty: isEmpty
};
/**
* [isEmpty description]
* @param {[type]} obj [description]
* @return {Boolean} [description]
*/
function isEmpty (obj) {
return (Object.getOwnPropertyNames(obj).length === 0);
}
/**
* [ok description]
* @param {[type]} arg [description]
* @return {[type]} [description]
*/
function ok (arg) {
switch (Object.prototype.toString.call(arg)) {
case '[object Array]':
return arg.length < 1 ? false : ok(arg[0]) ? true : false;
case '[object Object]':
return isEmpty(arg) ? false : true;
case '[object Null]':
return false;
case '[object Undefined]':
return false;
case '[object Number]':
return isFinite(arg);
case '[object String]':
return true;
case '[object Boolean]':
return arg;
case '[object Function]':
return ok(arg());
default:
return true;
}
}
/**
* [getClassName description]
* @param {[type]} arg [description]
* @return {[type]} [description]
*/
function getClassName (arg) {
return Object.prototype.toString.call(arg).match(/\s[a-zA-Z]+/)[0].trim().toLowerCase();
}
/**
* [isType description]
* @param {[type]} arg [description]
* @param {[type]} type [description]
* @return {Boolean} [description]
*/
function isType (arg, type) {
return (function test(arg, type) {
if(getClassName(type) === 'array'){
if(getClassName(arg) === 'object' && type[0] === 'object'){
return true;
}else if(getClassName(arg) === type[0] && isFinite(arg)){
return true;
}else if(getClassName(type[0]) === 'undefined'){
return false;
}else{
type.shift();
return test(arg, type);
}
}else{
if(getClassName(arg) === 'number' && type === 'number'){
return isFinite(arg);
}else{
return getClassName(arg) === type;
}
}
})(arg, type);
}
/**
* [checkEmail description]
* @param {[type]} email [description]
* @param {[type]} regexp [description]
* @return {[type]} [description]
*/
function checkEmail (email, regexp){
if(ok(email)) {
var myRegexp = isType(regexp, 'regexp') ? regexp : /\S+@\S+\.\S+/;
var result = myRegexp.test(email);
return result;
}else{
return false;
}
}