2018-02-04-JS梳理

由于项目需要,根据接口返回城市数据,标注国内地图城市点,这里记录实现过程,以备不时之需。

sessionStorage && localStorage

由于sessionStorage && localStorage 仅能存储字符串类型的数据,对于实际开发中需要
常用的 json 对象的操作及其不变,这里对sessionStorage && localStorage操作进行封装
供参考。

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
/**
* 获取 sessionStorage数据
* @param key
* @returns {{}}
*/
function getSessionStoreDataObj(key) {
var responseObj = undefined;
// 判断浏览器是否支持sessionStorage
if (window.sessionStorage) {
var responseJson = window.sessionStorage.getItem(key);
if (responseJson != null && responseJson != undefined) {
responseObj = JSON.parse(responseJson);
}
}
return responseObj;
}

/**
*
* @param key
* @param value
* @returns {*}
*/
function setSessionStoreData(key, value) {
var isSuccess = false;
// 判断浏览器是否支持sessionStorage
if (window.sessionStorage) {
if (isJSONStr(value)) {
window.sessionStorage.setItem(key, value);
} else if (isJsonObj(value)) {
window.sessionStorage.setItem(key, JSON.stringify(value));
} else {
var data = {};
data.data = value;
window.sessionStorage.setItem(key, JSON.stringify(data));
}
isSuccess = true;
}
return isSuccess;
}

/**
* 删除sessionStorage某一项item
* @param key
*/
function deleteSessionStoreItem(key) {
window.sessionStorage.removeItem(key);
}

/**
* 清空SessionStore
*/
function clearSessionStore() {
window.sessionStorage.clear();
}

deepCopy 对象的拷贝

前端开发过程中,操作对象的引用时,一不留神,会存在意想不到的结果,而
这结果往往是致命的。js 引擎并未提供类似对象拷贝的方法,这里进行一个较为完善的封装。
利用递归对嵌套对象进行处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* 对象的拷贝
* @param obj
* @returns {*}
*/
let deepCopy = function(obj){
if(typeof obj !== 'object'){
return obj;
}
var newobj = {};
for ( var attr in obj) {
newobj[attr] = deepCopy(obj[attr]);
}
return newobj;
}

正则

常用正则校验整理:

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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
function checkTempUserName(name) {
//判断纯中文正则
var regexCHN = new RegExp("^[\\u4E00-\\u9FA5]+$");
//纯英文
var regexEN = new RegExp("^[a-zA-Z]+$");
//纯英文必须包含/且/在中间,中间可以包含空格
//如果全英文,则可以带/,最多出现1次/
var regexEN1 = new RegExp("^[A-Za-z\\s*]+\\s*\\/\\s*[a-zA-Z\\s*]+$");
/**
* 匹配非特殊字符 包括字母和数字
*/
var regexNormal = new RegExp("[a-zA-Z /]+$");
//中文加字母
var regexEnChnEn = new RegExp("^[A-Za-z]+[\\u4E00-\\u9FA5]+[A-Za-z]+$");
var regexChnEn = new RegExp("^[\\u4E00-\\u9FA5]+[A-Za-z]+$");
var regexEnChn = new RegExp("^[A-Za-z]+[\\u4E00-\\u9FA5]+$");

if (name) {
if (regexEnChnEn.test(name)) {
return false;
} else if (regexEN.test(name)) {
//纯英文
return false;
} else if (regexEnChn.test(name)) {
return false;
} else if (regexCHN.test(name)) {
//中文
return !(name.length < 2 || name.length > 16);
} else if (regexChnEn.test(name)) {
//中文+英文
return !(name.length < 2 || name.length > 32);
} else {
//英文带/符合要求
return (
regexNormal.test(name) &&
regexEN1.test(name) &&
!(name.length < 2 || name.length > 32)
);
}
} else {
return false;
}
}

//检查传入内容是否为纯英文
function checkPrueEnglish(englishName) {
//纯英文
var regexEN = new RegExp("^[a-zA-Z]+$");
return regexEN.test(englishName);
}

//检查手机号
function checkPhone(phone) {
var regex = new RegExp("^1[0-9]{10,12}$");
return regex.test(phone);
}

//检查邮箱
function checkEmail(mail) {
var regex = new RegExp(
"^s*([a-zA-Z0-9_.-])+@(([a-zA-Z0-9_-])+.)+([a-zA-Z0-9]{2,20})s*$"
);
return regex.test(mail);
}

//检查护照
function checkPassport(pass) {
var regex = new RegExp("^[A-Za-z0-9]{1,50}$");
return regex.test(pass);
}

//检查身份证
function checkIdentityCode(code) {
var city = {
11: "北京",
12: "天津",
13: "河北",
14: "山西",
15: "内蒙古",
21: "辽宁",
22: "吉林",
23: "黑龙江 ",
31: "上海",
32: "江苏",
33: "浙江",
34: "安徽",
35: "福建",
36: "江西",
37: "山东",
41: "河南",
42: "湖北 ",
43: "湖南",
44: "广东",
45: "广西",
46: "海南",
50: "重庆",
51: "四川",
52: "贵州",
53: "云南",
54: "西藏 ",
61: "陕西",
62: "甘肃",
63: "青海",
64: "宁夏",
65: "新疆",
71: "台湾",
81: "香港",
82: "澳门",
91: "国外 ",
};
var pass = true;

if (
!code ||
!/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(
code
)
) {
pass = false;
} else if (!city[code.substr(0, 2)]) {
pass = false;
} else {
//18位身份证需要验证最后一位校验位
if (parseInt(code.length) === 18) {
code = code.split("");
//∑(ai×Wi)(mod 11)
//加权因子
var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
//校验位
var parity = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];
var sum = 0;
var ai = 0;
var wi = 0;
for (var i = 0; i < 17; i++) {
ai = code[i];
wi = factor[i];
sum += ai * wi;
}
if (parity[sum % 11] != code[17]) {
pass = false;
}
}
}
return pass;
}

//18位身份证获取生日
function getBirthday(idCard) {
if (idCard && idCard.length === 18) {
var bir = idCard.substr(6, 4);
bir += "-";
bir += idCard.substr(10, 2);
bir += "-";
bir += idCard.substr(12, 2);
return bir;
} else {
return null;
}
}

//身份证获取性别
function getSexFromIDCardMF(cardId) {
//modify by yzhao 解决性别传递出错问题
if (cardId) {
var sexCode = "1";
if (cardId.length === "15") {
sexCode = cardId.substr(14, 15);
} else if (cardId.length === "18") {
//18位身份证取第17位数
sexCode = cardId.substr(16, 17);
}
if (Math.abs(sexCode) % 2 === "1") {
return "M";
} else {
return "F";
}
}
return "";
}

// 加密身份证件号
function encryptIdInfo(indenti) {
var result = "";
if (indenti && (indenti.length === 18 || indenti.length === 15)) {
var last = indenti.slice(indenti.length - 4);
var arr = [];
for (var m = 0; m < indenti.length - 10; m++) {
arr.push("*");
}
var mid = arr.join("");
var first = indenti.slice(0, 6);
result = first + mid + last;
}
return result;
}

// 加密护照证件号
function encryptPassportInfo(passport) {
var result = "";
if (passport && passport.length > 4) {
var lastString = passport.slice(passport.length - 2);
var array = [];
for (var j = 0; j < passport.length - 4; j++) {
array.push("*");
}
var midString = array.join("");
var firstString = passport.slice(0, 2);
result = firstString + midString + lastString;
} else if (passport) {
result = passport;
}
return result;
}

2018-02-04-JS梳理
https://zhangyingxuan.github.io/2018-02-04-JS梳理/
作者
blowsysun
许可协议