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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
| * 邮箱验证 */
module.exports = (function validate(){
function trim( inputVal ){ var trimPattern = /\s*(.*)\s*/; return trimPattern.exec( inputVal )[1]; }; function lenTest( min, max, inputVal ){
var trimdinputVal = trim( inputVal ), len = trimdinputVal.length, result = {};
if( len >= min && len <= max ){ result.status = true; }else{ result.status = false; result.message = "长度不符合要求"; } return result; }; function validateMobilephone( inputVal ){ var mobilephonePattern = /([130-159]|[170-189])(\d){8}/, result = {}; if( mobilephonePattern.test( inputVal ) ){ result.status = true; }else{ result.status = false; result.message = "无效的手机号码"; } return result; }; function validateQQMail( inputVal ){ var onlyNumPattern = /\d+/, result = {};
* 首先验证是不是由纯数字构成,如果是,只有两种可能,是qq号对应的邮箱和手机号对应的邮箱,因为目前qq号最长恰好是11位,而手机号是固定11位长度,所以可以不特别验证是否是手机号码 */ if( onlyNumPattern.test( inputVal ) ){ if( lenTest( 5, 11, inputVal ).status ){ result.status = true; }else{ result.status = false; result.message = "不是有效的qq邮箱"; } }else{ * 对于并非全部由数字构成的情况: * 除首尾字符外,分为四种情况,设字母或者数字为1,点号,下划线,横杠为0,则有1开头,1结尾,1开头0结尾,0开头1结尾,0开头0结尾 * 第一次思考 * 1开头,1结尾型为([a-z]|[0-9])+(\.|-|_)*([a-z]|[0-9])+ * 1开头,0结尾型为(([a-z]|[0-9])+(\.|-|_))+ * 0开头,1结尾型为((\.|-|_)([a-z]|[0-9])+)+ * 0开头,0结尾型为((\.|-|_)([a-z]|[0-9])+)+(\.|-|_) * 第二次思考,上述四种正则可以简化为两种,1开头型的和0开头型的 * 1开头型(([a-z]|[0-9])+(\.|-|_){0,1})+([a-z]|[0-9])* * 0开头型((\.|-|_)([a-z]|[0-9])+)+(\.|-|_){0,1} */ if( lenTest( 3, 18, inputVal ).status ){ var qqPattern = /[a-z]((([a-z]|[0-9])+(\.|-|_){0,1})+([a-z]|[0-9])*|((\.|-|_)([a-z]|[0-9])+)+(\.|-|_){0,1})[a-z|0-9]/; if( qqPattern.test( inputVal ) ){ result.status = true; }else{ result.status = false; result.message = "不是有效的qq邮箱" } }else{ result.status = false; result.message = "不是有效的qq邮箱" } } return result; }; function validateGmail( inputVal ){
var lentest = lenTest( 6, 30, inputVal ), result = {};
if( lentest.status ){ * 正则表达式基本等同于qq邮箱验证中并非全部由数字构成的情况的正则表达式 */ var gmailPattern = /([a-z]|[0-9])((([a-z]|[0-9])+\.{0,1})+[a-z|0-9]*|(\.[a-z|0-9]+)+\.{0,1})([a-z]|[0-9])/; if( gmailPattern.test( inputVal ) ){ result.status = true; }else{ result.status = false; result.message = "不是有效的gmail邮箱"; } }else{ result = lentest; } return result; }; function validate163Mail( inputVal, provider ){ var lentest, mailPattern = /[a-z]([a-z]|[0-9]|_)([a-z]|[0-9])/, result = {};
switch( provider ){ case '163.com' : case '126.com' : lentest = lenTest( 6, 18, inputVal ); break; case 'vip.163.com' : case 'vip.126.com' : lentest = lenTest( 3, 20, inputVal ); break; case '188.com' : lentest = lenTest( 4, 20, inputVal ); break; default : result.status = false; result.message = "不是有效的网易邮箱"; }
if( lentest.status ){ if( mailPattern.test( inputVal ) ){ result.status = true; }else{ result.status = false; result.message = "不是有效的网易邮箱"; } }else{ result.status = false; result.message = "不是有效的网易邮箱"; }
return result; }; function validateOtherMail( inputVal ){ var lentest = lenTest( 3, 30, inputVal ), mailPattern = /([a-z]|[0-9])([a-z]|[0-9]|\.|-|_)([a-z]|[0-9])/;
if( mailPattern.test( inputVal ) ){ result.status = true; }else{ result.status = false; result.message = "无效的邮箱地址" } return result; }; return { email: function( inputVal ){ var strArr = trim( inputVal ).split( '@' ), domainPattern = /(([a-z]|[0-9]|-){1,63}\.){1,3}([a-z]|[0-9]|-){1,63}/;
if( strArr.length > 2 ){ var result = {}; result.status = false; result.message = "无效的邮箱地址"; return result; } var username = strArr[0], provider = strArr[1]; if( strArr[1] === 'qq.com' ){ return validateQQMail( username ); }else if( strArr[1] === '163.com' || '126.com' || 'vip.163.com' || 'vip.126.com' || '188.com'){ return validate163Mail( username, provider ); }else if( strArr[1] === 'gmail.com' ){ return validateGmail( username ); }else if( domainPattern.test( strArr[1] ) ){ return validateOtherMail( username ); } }, vacant : function( inputVal ){ var result = {}; if( trim( inputVal ) === '' ){ result.status = true; }else{ result.status = false; } return result; } } })();
|