由于项目需要,根据接口返回城市数据,标注国内地图城市点,这里记录实现过程,以备不时之需。
sessionStorage && localStorage
由于sessionStorage && localStorage
仅能存储字符串类型的数据,对于实际开发中需要
常用的json对象的操作及其不变,这里对sessionStorage && localStorage
操作进行封装
供参考。
/**
* 获取 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引擎并未提供类似对象拷贝的方法,这里进行一个较为完善的封装。 利用递归对嵌套对象进行处理。
/**
* 对象的拷贝
* @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;
}
正则
常用正则校验整理:
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;
}