验证身份证详细方法
function isCardNo(pId) { var arrVerifyCode = [1, 0, "x", 9, 8, 7, 6, 5, 4, 3, 2]; var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; var Checker = [1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1]; if (pId.length != 15 && pId.length != 18) {alert("身份证号共有 15 码或18位"); return false; } var Ai = pId.length == 18 ? pId.substring(0, 17) : pId.slice(0, 6) + "19" + pId.slice(6, 16); if (!/^\d+$/.test(Ai)){ alert("身份证除最后一位外,必须为数字!"); return false; } var yyyy = Ai.slice(6, 10), mm = Ai.slice(10, 12) - 1, dd = Ai.slice(12, 14); var d = new Date(yyyy, mm, dd), year = d.getFullYear(), mon = d.getMonth(), day = d.getDate(), now = new Date(); if (year != yyyy || mon != mm || day != dd || d > now || now.getFullYear() - year > 140){ alert("身份证输入错误!"); return false; } for (var i = 0, ret = 0; i < 17; i++){ ret += Ai.charAt(i) * Wi[i]; } Ai += arrVerifyCode[ret %= 11]; if(pId.length == 18 && pId.toLowerCase() != Ai){ alert("身份证输入错误!"); return false; } return true; };
倒计时返回首页
var s = null; var tc =0; function showSeconds(totle){ tc=totle; $("body").append(‘<div id="divTimeSeconds" style="color:#fff;line-height:80px;position:absolute;z-index:100;right:24%;top:3%;width:100px;font-size:68px;"></div>‘); s = setInterval(function () { tc--; //$("#second").html(totle<10?"0" + totle+"s":totle+"s"); //setInterval("document.getElementById(‘divTimeSeconds‘).innerHTML=‘"+totle+"s‘",1000); document.getElementById("divTimeSeconds").innerHTML=tc+‘s‘; if(tc==0){ clearInterval(s); window.location.href = "index.html"; } }, 1000); }
到某时间的倒计时,传入的参数以 (YYYY/MM/DD H:mm:ss)
function getEndTime(endTime){ var startDate=new Date(); //开始时间,当前时间 var endDate=new Date(endTime); //结束时间,需传入时间参数 var t=endDate.getTime()-startDate.getTime(); //时间差的毫秒数 var d=0,h=0,m=0,s=0; if(t>=0){ d=Math.floor(t/1000/3600/24); h=Math.floor(t/1000/60/60%24); m=Math.floor(t/1000/60%60); s=Math.floor(t/1000%60); } return "剩余时间"+d+"天 "+h+"小时 "+m+" 分钟"+s+" 秒"; } getEndTime(‘2018/8/8 8:0:0‘) // "剩余时间172天 12小时 10 分钟47 秒"
日期方法集
Angela.date = { //# 日期时间 //@s : 开始时间 //@e : 结束时间 //@n : 当前时间 , n 的格式为 毫秒数 isInArea: function (s, e, n) { //# 判断时间区域 var start = this.parse(s), end = this.parse(e), now = parseFloat(n) || new Date() ; start = Math.min(start, end); end = Math.max(start, end); return now >= start && now <= end ? true : false; } //把 字符窜转化为 毫秒 //@date : 2013-03-02 1:2:2 , parse: function (date) { //# 格式化时间 return Date.parse(date); //.replace(/-/g, ‘/‘) } //@time , 时间 , 如 new Date(‘2013/11/10 0:12:12‘) //@pre , 星期的 前缀,如:周 ,星期 //@ nums ,如:一二三四五六日 , getWeek: function (time, pre, nums) { //# 获取星期几 time = typeof time == ‘string‘ ? this.parse(time) : (time || new Date()); pre = pre || ‘星期‘; //周 nums = ‘日一二三四五六‘; return pre + nums[time.getDay()]; } //@formatType : YYYY, YY, MM //@ time : new Date(‘2013/11/12‘) //@weeks : 日一二三四五六 , format: function (formatType, time, weeks) { //格式化输出时间 var pre = ‘0‘ ; formatType = formatType || ‘YYYY-MM-DD‘ weeks = weeks || ‘日一二三四五六‘; time = time || new Date(); //格式化时间 return (formatType || ‘‘) .replace(/yyyy|YYYY/g, time.getFullYear()) .replace(/yy|YY/g, Angela.string.addPre(pre, time.getFullYear() % 100), 2) .replace(/mm|MM/g, Angela.string.addPre(pre, time.getMonth() + 1, 2)) .replace(/m|M/g, time.getMonth() + 1) .replace(/dd|DD/g, Angela.string.addPre(pre, time.getDate(), 2)) .replace(/d|D/g, time.getDate()) .replace(/hh|HH/g, Angela.string.addPre(pre, time.getHours(), 2)) .replace(/h|H/g, time.getHours()) .replace(/ii|II/g, Angela.string.addPre(pre, time.getMinutes(), 2)) .replace(/i|I/g, time.getMinutes()) .replace(/ss|SS/g, Angela.string.addPre(pre, time.getSeconds(), 2)) .replace(/s|S/g, time.getSeconds()) .replace(/w/g, time.getDay()) .replace(/W/g, weeks[time.getDay()]) ; } //倒计时 , countDown: function (opt) { //# 倒计时 var option = { nowTime: 0 // 当前时间, ,2013/02/01 18:30:30 , endTime: 0 //截止时间 ,2013/02/01 18:30:30 , interval: 1 //间隔回调时间,秒 , called: function (day, hour, second, minute) { }//每次回调 , finaled: function () { } //完成后回调 } , opts = {} , timer = null ; opts = Angela.extend(option, opt); //当前时间 if (!opts.nowTime) { opts.nowTime = (new Date()).getTime(); } else { opts.nowTime = this.parse(opts.nowTime); } //当前时间 if (!opts.endTime) { opts.endTime = (new Date()).getTime(); } else { opts.endTime = this.parse(opts.endTime); } timer = setInterval(loop, opts.interval * 1e3); // 循环 function loop() { var ts = opts.endTime - opts.nowTime //计算剩余的毫秒数 , dd = parseInt(ts / 8.64e7) //计算剩余的天数 , hh = parseInt(ts / 3.6e7 % 24)//计算剩余的小时数 , mm = parseInt(ts / 6e4 % 60)//计算剩余的分钟数 , ss = parseInt(ts / 1e3 % 60)//计算剩余的秒数 ; //当前时间递减 opts.nowTime += opts.interval * 1e3; if (ts <= 0) { clearInterval(timer); opts.finaled(); } else { opts.called(dd, hh, mm, ss); } } } };
sleep几秒
function sleep(numberMillis) { var now = new Date(); var exitTime = now.getTime() + numberMillis; while (true) { now = new Date(); if (now.getTime() > exitTime) return; } }
字符串处理的公共方法
/** * 字符串处理的公共方法 * 1.去除字符串空格 * 2.字母大小写切换 * 3.字符串替换 * 4.查找某个字符或字符串在另一个字符串中出现的次数 */ var strJS = { /** * 去除字符串空格 * @param str 要处理的字符串 * @param type 1:所有空格 2:前后空格 3:前空格 4:后空格 */ strTrim:function (str,type){ switch (type){ case 1:return str.replace(/\s+/g,""); case 2:return str.replace(/(^\s*)|(\s*$)/g, ""); case 3:return str.replace(/(^\s*)/g, ""); case 4:return str.replace(/(\s*$)/g, ""); default:return str; } } , /** * 字母大小写切换 * @param str 要处理的字符串 * @param type 1:首字母大写 2:首页母小写 3:大小写转换 4:全部大写 5:全部小写 */ strChangeCase:function (str,type){ function ToggleCase(str) { var itemText = "" str.split("").forEach( function (item) { if (/^([a-z]+)/.test(item)) { itemText += item.toUpperCase(); } else if (/^([A-Z]+)/.test(item)) { itemText += item.toLowerCase(); } else{ itemText += item; } }); return itemText; } switch (type) { case 1: return str.replace(/^(\w)(\w+)/, function (v, v1, v2) { return v1.toUpperCase() + v2.toLowerCase(); }); case 2: return str.replace(/^(\w)(\w+)/, function (v, v1, v2) { return v1.toLowerCase() + v2.toUpperCase(); }); case 3: return ToggleCase(str); case 4: return str.toUpperCase(); case 5: return str.toLowerCase(); default: return str; } } , /** * 字符串替换 * @param str 字符串 * @param aFindText 要替换的字符 * @param aRepText 替换成什么 */ replaceAll:function (str,aFindText,aRepText){ raRegExp = new RegExp(aFindText,"g") ; return str.replace(raRegExp,aRepText); }, /** * 查找某个字符或字符串在另一个字符串中出现的次数 * @param str 字符串 * @param strSplit 要查找的字符或字符串 * @returns {Number} 返回出现的次数 * 例:countStr("klsdjflds","s") 返回2 */ countStr:function (str,strSplit){ return str.split(strSplit).length-1 } }
字符串方法集
Angela.string = { //# 字符串 codeHtml: function (content) { //# 转义 HTML 字符 return this.replace(content, { ‘&‘: "&" , ‘"‘: """ , "‘": ‘'‘ , ‘<‘: "<" , ‘>‘: ">" , ‘ ‘: " " , ‘\t‘: " " , ‘(‘: "(" , ‘)‘: ")" , ‘*‘: "*" , ‘+‘: "+" , ‘,‘: "," , ‘-‘: "-" , ‘.‘: "." , ‘/‘: "/" , ‘?‘: "?" , ‘\\‘: "\" , ‘\n‘: "<br>" }); } //重复字符串 , repeat: function (word, length, end) { //# 重复字符串 end = end || ‘‘; //加在末位 length = ~~length; return new Array(length * 1 + 1).join(word) + ‘‘ + end; } //增加前缀 , addPre: function (pre, word, size) { //# 补齐。如给数字前 加 0 pre = pre || ‘0‘; size = parseInt(size) || 0; word = String(word || ‘‘); var length = Math.max(0, size - word.length); return this.repeat(pre, length, word); } //去除两边空格 , trim: function (text) { //# 去除两边空格 return (text || ‘‘).replace(/^\s+|\s$/, ‘‘); } //字符串替换 , replace: function (str, re) { //# 字符串替换 str = str || ‘‘; for (var key in re) { replace(key, re[key]); }; function replace(a, b) { var arr = str.split(a); str = arr.join(b); }; return str; } , xss: function (str, type) { //# XSS 转义 //空过滤 if (!str) { return str === 0 ? "0" : ""; } switch (type) { case "html": //过滤html字符串中的XSS return str.replace(/[&‘"<>\/\\\-\x00-\x09\x0b-\x0c\x1f\x80-\xff]/g, function (r) { return "&#" + r.charCodeAt(0) + ";" }).replace(/ /g, " ").replace(/\r\n/g, "<br />").replace(/\n/g, "<br />").replace(/\r/g, "<br />"); break; case "htmlEp": //过滤DOM节点属性中的XSS return str.replace(/[&‘"<>\/\\\-\x00-\x1f\x80-\xff]/g, function (r) { return "&#" + r.charCodeAt(0) + ";" }); break; case "url": //过滤url return escape(str).replace(/\+/g, "%2B"); break; case "miniUrl": return str.replace(/%/g, "%25"); break; case "script": return str.replace(/[\\"‘]/g, function (r) { return "\\" + r; }).replace(/%/g, "\\x25").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\x01/g, "\\x01"); break; case "reg": return str.replace(/[\\\^\$\*\+\?\{\}\.\(\)\[\]]/g, function (a) { return "\\" + a; }); break; default: return escape(str).replace(/[&‘"<>\/\\\-\x00-\x09\x0b-\x0c\x1f\x80-\xff]/g, function (r) { return "&#" + r.charCodeAt(0) + ";" }).replace(/ /g, " ").replace(/\r\n/g, "<br />").replace(/\n/g, "<br />").replace(/\r/g, "<br />"); break; } } // badword , 过滤敏感词 //@text : 要过滤的文本 , 类型 :字符串 //@words : 敏感词 ,类型,数组, 如 : [‘你妹‘, ‘我丢‘ ,‘我靠‘] // 如果 用 正则匹配, text 长度 100万,words 100万,需要 4秒! , badWord: function (text, words) { //# 敏感词过滤 text = String(text || ‘‘); words = words || []; var reg = new RegExp(words.join(‘|‘), ‘g‘) , _self = this; return text.replace(reg, function ($0) { var length = String($0 || ‘‘).length; return _self.repeat(‘*‘, length); }); } };
数组相关方法
/** * 数组相关方法 * 1.数组去重 * 2.将数组乱序输出 * 3.获取数组的最大值,最小值,只针对数字类型的数组 * 4.得到数组的和,只针对数字类型数组 * 5.数组的平均值,只针对数字类型数组,小数点可能会有很多位,这里不做处理,处理了使用就不灵活了! * 6.随机获取数组中的某个元素 * 7.返回某个元素在数组中出现的次数 */ var arrJS={ /** * 数组去重 * 用的是Array的from方法 * @param arr 数组 * @returns 去重后的数组 */ removeRepeatArray:function (arr){ return Array.from(new Set(arr)) } , /** * 将数组乱序输出 * @param arr 数组 * @returns 打乱后的数组 */ upsetArr:function (arr){ return arr.sort(function(){ return Math.random() - 0.5}); }, /** * 获取数组的最大值,最小值,只针对数字类型的数组 * @param arr 数组 * @param type 0:最小值,1:最大值 * @returns */ compareArr:function (arr,type){ if(type==1){ return Math.max.apply(null,arr); }else{ return Math.min.apply(null,arr); } }, /** * 得到数组的和,只针对数字类型数组 * @param arr 数组 * @returns {Number} 和 */ sumArr:function (arr){ var sumText=0; for(var i=0,len=arr.length;i<len;i++){ sumText+=arr[i]; } return sumText }, /** * 数组的平均值,只针对数字类型数组,小数点可能会有很多位,这里不做处理,处理了使用就不灵活了! * @param arr 数组 * @returns {Number} 平均值 */ covArr:function (arr){ var sumText=sumArr(arr); var covText=sumText/arr.length; return covText ; }, /** * 随机获取数组中的某个元素 * @param arr 数组 * @returns 随机获取的值 */ randomOne:function (arr) { return arr[Math.floor(Math.random() * arr.length)]; }, /** * 返回某个元素在数组中出现的次数 * @param arr 数组 * @param ele 要查找的元素 * @returns {Number} 出现的次数 */ getEleCount:function (arr, ele) { var num = 0; for (var i = 0, len = arr.length; i < len; i++) { if (ele == arr[i]) { num++; } } return num; }, /** * 简单数组排序,针对数字数组 * @param type 1:降序,0:升序 */ sortArr:function(arr,type){ if(type==1){ //降序 arr.sort(function(a,b){ return b-a ; }) ; }else{ arr.sort(function(a,b){ return a-b ; }) ; } return arr ; }, sortObjectArr:function(arr,type){ if(type==1){ arr.sort(function(a,b){ if (a.age>b.age) return 1 ; if (a.age<b.age) return -1 ; if (a.age=b.age) return 0 ; }) ; }else{ arr.sort(function(a,b){ if (a.age>b.age) return -1 ; if (a.age<b.age) return 1 ; if (a.age=b.age) return 0 ; }) ; } return arr ; } }
清除对象中值为空的属性
function filterParams(obj){ let _newPar = {}; for (let key in obj) { if ((obj[key] !== 0 && obj[key]) && obj[key].toString().replace(/(^\s*)|(\s*$)/g, ‘‘) !== ‘‘) { _newPar[key] = obj[key]; } } return _newPar; } filterParams({a:0, b:1, c:"010", d:null, e:undefined,f:false}) // 当值等于0,null,undefined的时候,就会被过滤
判断一个对象是不是数组类型
unction _getClass(o){ return Object.prototype.toString.call(o).slice(8,-1); } _getClass(new Date()); // Date_getClass(‘maolei‘); // String
字符串 变为 json 对象
Angela.json = { //# json 对象 // 字符串 变为 json 对象 parse: function (data) { //# 格式化字符串,变为 json 对象 var // JSON RegExp rvalidchars = /^[\],:{}\s]*$/ , rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g , rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g , rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g ; if (window.JSON && window.JSON.parse) { return window.JSON.parse(data); } if (data === null) { return data; } if (typeof data === "string") { data = data.replace(/^\s+|\s+$/g, ‘‘); if (data && rvalidchars.test(data.replace(rvalidescape, "@") .replace(rvalidtokens, "]") .replace(rvalidbraces, ""))) { return (new Function("return " + data))(); } } return ‘‘; } };
id数组转换为json字符串
js的排序算法
function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len; i++) { for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j+1]) { //相邻元素两两对比 var temp = arr[j+1]; //元素交换 arr[j+1] = arr[j]; arr[j] = temp; } } } return arr; }var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]; bubbleSort(arr);//[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50] ;
cookie相关方法
// setCookie() // @About 设置cookie 默认一个月失效 function setCookie(name, value) { var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000); document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString(); } // getCookie() // @About 获取cookie function getCookie(name) { var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)")); if (arr != null) { return (arr[2]); } else { return ""; } } // delCookie() // @About 删除cookie function delCookie(name) { var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval = getCookie(name); if (cval != null) { document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString(); } }
/** * cookie相关方法 * 1.设置cookie * 2.获取cookie * 3.删除cookie */ var cookieJS = { /** * 设置cookie * @param name cookie名称 * @param value cookie值 * @param iDay cookie的时间 */ setCookie:function (name,value,iDay){ var oDate=new Date(); oDate.setDate(oDate.getDate()+iDay); document.cookie=name+‘=‘+value+‘;expires=‘+oDate; }, /** * 获取cookie * @param name cookie名称 * @returns */ getCookie:function (name){ var arr=document.cookie.split(‘; ‘); for(var i=0;i<arr.length;i++){ var arr2=arr[i].split(‘=‘); if(arr2[0]==name) { return arr2[1]; } } return ‘‘; }, /** * 删除cookie * @param name cookie名称 */ removeCookie:function (name){ setCookie(name,1,-1); } }
获取系统的url
/** * 获取系统的url * @returns fullUrl:系统访问路径,例如:http://localhost:8080/amudraya/amudraya */ function getURL(){ var fullUrl = window.location.href; var a=fullUrl.lastIndexOf(‘/‘); fullUrl=fullUrl.substring(0,a); var b=fullUrl.lastIndexOf(‘/‘); fullUrl=fullUrl.substring(0,b); var c=fullUrl.lastIndexOf(‘/‘); fullUrl=fullUrl.substring(0,c); return fullUrl; }
获取,设置url参数,url 参数就是其中 ? 后面的参数
function getUrlPrmt(url) { url = url ? url : window.location.href; let _pa = url.substring(url.indexOf(‘?‘) + 1), _arrS = _pa.split(‘&‘), _rs = {}; for (let i = 0, _len = _arrS.length; i < _len; i++) { let pos = _arrS[i].indexOf(‘=‘); if (pos == -1) { continue; } let name = _arrS[i].substring(0, pos), value = window.decodeURIComponent(_arrS[i].substring(pos + 1)); _rs[name] = value; } return _rs; }
设置url
参数的函数,如果对象中有null
和undefined
,则会自动过滤
function setUrlPrmt(obj) { let _rs = []; for (let p in obj) { if (obj[p] != null && obj[p] != ‘‘) { _rs.push(p + ‘=‘ + obj[p]) } } return _rs.join(‘&‘); } setUrlPrmt({a:‘0‘, b:1, c:"010", d:null, e:undefined,f:false}) // "a=0&b=1&c=010"
验证码
/**========================验证码开始=============**/ var code ; //在全局 定义验证码 function createCode(){ code = ""; var codeLength = 4;//验证码的长度 var checkCode = document.getElementById("checkCode"); checkCode.value = ""; var selectChar = new Array(1,2,3,4,5,6,7,8,9, ‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘,‘h‘,‘j‘,‘k‘,‘l‘,‘m‘,‘n‘,‘p‘,‘q‘, ‘r‘,‘s‘,‘t‘,‘u‘,‘v‘,‘w‘,‘x‘,‘y‘,‘z‘,‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘, ‘G‘,‘H‘,‘J‘,‘K‘,‘L‘,‘M‘,‘N‘,‘P‘,‘Q‘,‘R‘,‘S‘,‘T‘,‘U‘,‘V‘,‘W‘,‘X‘,‘Y‘,‘Z‘); for(var i=0;i<codeLength;i++) { var charIndex = Math.floor(Math.random()*60); code +=selectChar[charIndex]; } if(code.length != codeLength){ createCode(); } checkCode.value = code; } function validate () { var inputCode = document.getElementById("loginCodeId").value.toUpperCase(); var codeToUp=code.toUpperCase(); if(inputCode.length <=0) { alert("请输入验证码!"); return false; } else if(inputCode != codeToUp ){ alert("验证码输入错误!"); createCode(); return false; } else { return true; } } /**======================验证码结束==================**/ /** * 关闭忘记密码页面 */ function closeWindow(){ $win.window(‘close‘); }
判断字符串是否数值
** * 判断字符串是否数值 * @param str 字符串 * @param isInt 是否是整数 * @param allowNegative 是否允许负数 * @author sunchangtan * @returns {*} * @private */ function _validateNum(str, isInt, allowNegative) { if(!str) { return false; } if(isInt) { //整数 if(allowNegative) { //允许负数 var r = /^-?\d+$/ //整数 return r.test(str); } else { //不允许负数 var r = /^\d+$/ //非负整数 return r.test(str); } } else { //数值(整数、浮点数) if(allowNegative) { //允许负数 var regPos = /^\d+(\.\d+)?$/; //非负浮点数 var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数 return regPos.test(str) || regNeg.test(str); } else { //不允许负数 var r = /^\d+(\.\d+)?$/ //非负浮点数 return r.test(str); } } }
随机数
function randomNumber(n1,n2){ if(arguments.length===2){ return Math.round(n1+Math.random()*(n2-n1)); } else if(arguments.length===1){ return Math.round(Math.random()*n1) } // // else{ return Math.round(Math.random()*255) } } randomNumber(5,10) // 返回5-10的随机整数,包括5,10 randomNumber(10) // 返回0-10的随机整数,包括0,10 randomNumber() // 返回0-255的随机整数,包括0,255
获取文件后缀名的方法
function getSuffix(file_name) { var result = /[^\.]+$/.exec(file_name); return result; } getSuffix(‘1234.png‘) // ["png", index: 5, input: "1234.png"]getSuffix(‘1231344.file‘); // ["file", index: 8, input: "1231344.file"]
正则表达式方法集
Angela.regExp = { //# 字符串匹配 //是否为 数字!整数,浮点数 isNum: function (num) { //# 是否为数组 return !isNaN(num); } , isEmail: function (mail) {//# 是否为 邮箱 return /^([a-z0-9]+[_\-\.]?)*[a-z0-9][email protected]([a-z0-9]+[_\-\.]?)*[a-z0-9]+\.[a-z]{2,5}$/i.test(mail); } , isIdCard: function (card) { //# 是否为 身份证 return /^(\d{14}|\d{17})(\d|[xX])$/.test(card); } , isMobile: function (mobile) { //# 是否为 手机 return /^0*1\d{10}$/.test(mobile); } , isQQ: function (qq) { //# 是否为 QQ return /^[1-9]\d{4,10}$/.test(qq); } , isTel: function (tel) { //# 是否为 电话 return /^\d{3,4}-\d{7,8}(-\d{1,6})?$/.text(tel); } , isUrl: function (url) { //# 是否为 URL return /https?:\/\/[a-z0-9\.\-]{1,255}\.[0-9a-z\-]{1,255}/i.test(url); } , isColor: function (color) { //# 是否为 16进制颜色 return /#([\da-f]{3}){1,2}$/i.test(color); } //@id : 身份证 , // @now : 当前时间 如:new Date(‘2013/12/12‘) , ‘2013/12/12‘ // @age : 允许的年龄 , isAdult: function (id, allowAge, now) { //# 是否年龄是否成年 var age = 0 // 用户 年月日 , nowDate = 0 //当前年月日 ; allowAge = parseFloat(allowAge) || 18; now = typeof now == ‘string‘ ? new Date(now) : (now || new Date()); if (!this.isIdCard(id)) { return false; } //15位身份证 if (15 == id.length) { age = ‘19‘ + id.slice(6, 6); } else { age = id.slice(6, 14); } // 类型转换 整型 age = ~~age; nowDate = ~~(Angela.date.format(‘YYYYMMDD‘, now)); //比较年龄 if (nowDate - age < allowAge * 1e4) { return false; } return true; } //浮点数 , isFloat: function (num) { //# 是否为 浮点数 return /^(([1-9]\d*)|(\d+\.\d+)|0)$/.test(num); } //正整数 , isInt: function (num) { //# 是否为 正整数 return /^[1-9]\d*$/.test(num); } //是否全为汉字 , isChinese: function (str) { //# 是否全为 汉字 return /^([\u4E00-\u9FA5]|[\uFE30-\uFFA0])+$/gi.test(str); } };
加密方法集
Angela.encrypt = { //# 加密 md5: function (words) { //# md5 哈希算法 /* * Crypto-JS 3.1.2 * http://code.google.com/p/crypto-js */ var CryptoJS = function (s, p) { var m = {}, l = m.lib = {}, n = function () { }, r = l.Base = { extend: function (b) { n.prototype = this; var h = new n; b && h.mixIn(b); h.hasOwnProperty("init") || (h.init = function () { h.$super.init.apply(this, arguments) }); h.init.prototype = h; h.$super = this; return h }, create: function () { var b = this.extend(); b.init.apply(b, arguments); return b }, init: function () { }, mixIn: function (b) { for (var h in b) b.hasOwnProperty(h) && (this[h] = b[h]); b.hasOwnProperty("toString") && (this.toString = b.toString) }, clone: function () { return this.init.prototype.extend(this) } }, q = l.WordArray = r.extend({ init: function (b, h) { b = this.words = b || []; this.sigBytes = h != p ? h : 4 * b.length }, toString: function (b) { return (b || t).stringify(this) }, concat: function (b) { var h = this.words, a = b.words, j = this.sigBytes; b = b.sigBytes; this.clamp(); if (j % 4) for (var g = 0; g < b; g++) h[j + g >>> 2] |= (a[g >>> 2] >>> 24 - 8 * (g % 4) & 255) << 24 - 8 * ((j + g) % 4); else if (65535 < a.length) for (g = 0; g < b; g += 4) h[j + g >>> 2] = a[g >>> 2]; else h.push.apply(h, a); this.sigBytes += b; return this }, clamp: function () { var b = this.words, h = this.sigBytes; b[h >>> 2] &= 4294967295 << 32 - 8 * (h % 4); b.length = s.ceil(h / 4) }, clone: function () { var b = r.clone.call(this); b.words = this.words.slice(0); return b }, random: function (b) { for (var h = [], a = 0; a < b; a += 4) h.push(4294967296 * s.random() | 0); return new q.init(h, b) } }), v = m.enc = {}, t = v.Hex = { stringify: function (b) { var a = b.words; b = b.sigBytes; for (var g = [], j = 0; j < b; j++) { var k = a[j >>> 2] >>> 24 - 8 * (j % 4) & 255; g.push((k >>> 4).toString(16)); g.push((k & 15).toString(16)) } return g.join("") }, parse: function (b) { for (var a = b.length, g = [], j = 0; j < a; j += 2) g[j >>> 3] |= parseInt(b.substr(j, 2), 16) << 24 - 4 * (j % 8); return new q.init(g, a / 2) } }, a = v.Latin1 = { stringify: function (b) { var a = b.words; b = b.sigBytes; for (var g = [], j = 0; j < b; j++) g.push(String.fromCharCode(a[j >>> 2] >>> 24 - 8 * (j % 4) & 255)); return g.join("") }, parse: function (b) { for (var a = b.length, g = [], j = 0; j < a; j++) g[j >>> 2] |= (b.charCodeAt(j) & 255) << 24 - 8 * (j % 4); return new q.init(g, a) } }, u = v.Utf8 = { stringify: function (b) { try { return decodeURIComponent(escape(a.stringify(b))) } catch (g) { throw Error("Malformed UTF-8 data"); } }, parse: function (b) { return a.parse(unescape(encodeURIComponent(b))) } }, g = l.BufferedBlockAlgorithm = r.extend({ reset: function () { this._data = new q.init; this._nDataBytes = 0 }, _append: function (b) { "string" == typeof b && (b = u.parse(b)); this._data.concat(b); this._nDataBytes += b.sigBytes }, _process: function (b) { var a = this._data, g = a.words, j = a.sigBytes, k = this.blockSize, m = j / (4 * k), m = b ? s.ceil(m) : s.max((m | 0) - this._minBufferSize, 0); b = m * k; j = s.min(4 * b, j); if (b) { for (var l = 0; l < b; l += k) this._doProcessBlock(g, l); l = g.splice(0, b); a.sigBytes -= j } return new q.init(l, j) }, clone: function () { var b = r.clone.call(this); b._data = this._data.clone(); return b }, _minBufferSize: 0 }); l.Hasher = g.extend({ cfg: r.extend(), init: function (b) { this.cfg = this.cfg.extend(b); this.reset() }, reset: function () { g.reset.call(this); this._doReset() }, update: function (b) { this._append(b); this._process(); return this }, finalize: function (b) { b && this._append(b); return this._doFinalize() }, blockSize: 16, _createHelper: function (b) { return function (a, g) { return (new b.init(g)).finalize(a) } }, _createHmacHelper: function (b) { return function (a, g) { return (new k.HMAC.init(b, g)).finalize(a) } } }); var k = m.algo = {}; return m }(Math); (function (s) { function p(a, k, b, h, l, j, m) { a = a + (k & b | ~k & h) + l + m; return (a << j | a >>> 32 - j) + k } function m(a, k, b, h, l, j, m) { a = a + (k & h | b & ~h) + l + m; return (a << j | a >>> 32 - j) + k } function l(a, k, b, h, l, j, m) { a = a + (k ^ b ^ h) + l + m; return (a << j | a >>> 32 - j) + k } function n(a, k, b, h, l, j, m) { a = a + (b ^ (k | ~h)) + l + m; return (a << j | a >>> 32 - j) + k } for (var r = CryptoJS, q = r.lib, v = q.WordArray, t = q.Hasher, q = r.algo, a = [], u = 0; 64 > u; u++) a[u] = 4294967296 * s.abs(s.sin(u + 1)) | 0; q = q.MD5 = t.extend({ _doReset: function () { this._hash = new v.init([1732584193, 4023233417, 2562383102, 271733878]) }, _doProcessBlock: function (g, k) { for (var b = 0; 16 > b; b++) { var h = k + b, w = g[h]; g[h] = (w << 8 | w >>> 24) & 16711935 | (w << 24 | w >>> 8) & 4278255360 } var b = this._hash.words, h = g[k + 0], w = g[k + 1], j = g[k + 2], q = g[k + 3], r = g[k + 4], s = g[k + 5], t = g[k + 6], u = g[k + 7], v = g[k + 8], x = g[k + 9], y = g[k + 10], z = g[k + 11], A = g[k + 12], B = g[k + 13], C = g[k + 14], D = g[k + 15], c = b[0], d = b[1], e = b[2], f = b[3], c = p(c, d, e, f, h, 7, a[0]), f = p(f, c, d, e, w, 12, a[1]), e = p(e, f, c, d, j, 17, a[2]), d = p(d, e, f, c, q, 22, a[3]), c = p(c, d, e, f, r, 7, a[4]), f = p(f, c, d, e, s, 12, a[5]), e = p(e, f, c, d, t, 17, a[6]), d = p(d, e, f, c, u, 22, a[7]), c = p(c, d, e, f, v, 7, a[8]), f = p(f, c, d, e, x, 12, a[9]), e = p(e, f, c, d, y, 17, a[10]), d = p(d, e, f, c, z, 22, a[11]), c = p(c, d, e, f, A, 7, a[12]), f = p(f, c, d, e, B, 12, a[13]), e = p(e, f, c, d, C, 17, a[14]), d = p(d, e, f, c, D, 22, a[15]), c = m(c, d, e, f, w, 5, a[16]), f = m(f, c, d, e, t, 9, a[17]), e = m(e, f, c, d, z, 14, a[18]), d = m(d, e, f, c, h, 20, a[19]), c = m(c, d, e, f, s, 5, a[20]), f = m(f, c, d, e, y, 9, a[21]), e = m(e, f, c, d, D, 14, a[22]), d = m(d, e, f, c, r, 20, a[23]), c = m(c, d, e, f, x, 5, a[24]), f = m(f, c, d, e, C, 9, a[25]), e = m(e, f, c, d, q, 14, a[26]), d = m(d, e, f, c, v, 20, a[27]), c = m(c, d, e, f, B, 5, a[28]), f = m(f, c, d, e, j, 9, a[29]), e = m(e, f, c, d, u, 14, a[30]), d = m(d, e, f, c, A, 20, a[31]), c = l(c, d, e, f, s, 4, a[32]), f = l(f, c, d, e, v, 11, a[33]), e = l(e, f, c, d, z, 16, a[34]), d = l(d, e, f, c, C, 23, a[35]), c = l(c, d, e, f, w, 4, a[36]), f = l(f, c, d, e, r, 11, a[37]), e = l(e, f, c, d, u, 16, a[38]), d = l(d, e, f, c, y, 23, a[39]), c = l(c, d, e, f, B, 4, a[40]), f = l(f, c, d, e, h, 11, a[41]), e = l(e, f, c, d, q, 16, a[42]), d = l(d, e, f, c, t, 23, a[43]), c = l(c, d, e, f, x, 4, a[44]), f = l(f, c, d, e, A, 11, a[45]), e = l(e, f, c, d, D, 16, a[46]), d = l(d, e, f, c, j, 23, a[47]), c = n(c, d, e, f, h, 6, a[48]), f = n(f, c, d, e, u, 10, a[49]), e = n(e, f, c, d, C, 15, a[50]), d = n(d, e, f, c, s, 21, a[51]), c = n(c, d, e, f, A, 6, a[52]), f = n(f, c, d, e, q, 10, a[53]), e = n(e, f, c, d, y, 15, a[54]), d = n(d, e, f, c, w, 21, a[55]), c = n(c, d, e, f, v, 6, a[56]), f = n(f, c, d, e, D, 10, a[57]), e = n(e, f, c, d, t, 15, a[58]), d = n(d, e, f, c, B, 21, a[59]), c = n(c, d, e, f, r, 6, a[60]), f = n(f, c, d, e, z, 10, a[61]), e = n(e, f, c, d, j, 15, a[62]), d = n(d, e, f, c, x, 21, a[63]); b[0] = b[0] + c | 0; b[1] = b[1] + d | 0; b[2] = b[2] + e | 0; b[3] = b[3] + f | 0 }, _doFinalize: function () { var a = this._data, k = a.words, b = 8 * this._nDataBytes, h = 8 * a.sigBytes; k[h >>> 5] |= 128 << 24 - h % 32; var l = s.floor(b / 4294967296); k[(h + 64 >>> 9 << 4) + 15] = (l << 8 | l >>> 24) & 16711935 | (l << 24 | l >>> 8) & 4278255360; k[(h + 64 >>> 9 << 4) + 14] = (b << 8 | b >>> 24) & 16711935 | (b << 24 | b >>> 8) & 4278255360; a.sigBytes = 4 * (k.length + 1); this._process(); a = this._hash; k = a.words; for (b = 0; 4 > b; b++) h = k[b], k[b] = (h << 8 | h >>> 24) & 16711935 | (h << 24 | h >>> 8) & 4278255360; return a }, clone: function () { var a = t.clone.call(this); a._hash = this._hash.clone(); return a } }); r.MD5 = t._createHelper(q); r.HmacMD5 = t._createHmacHelper(q) })(Math); return CryptoJS.MD5(words).toString(); } // sha1 , sha1: function (words) { //# sha1 哈希算法 var CryptoJS = function (e, m) { var p = {}, j = p.lib = {}, l = function () { }, f = j.Base = { extend: function (a) { l.prototype = this; var c = new l; a && c.mixIn(a); c.hasOwnProperty("init") || (c.init = function () { c.$super.init.apply(this, arguments) }); c.init.prototype = c; c.$super = this; return c }, create: function () { var a = this.extend(); a.init.apply(a, arguments); return a }, init: function () { }, mixIn: function (a) { for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]); a.hasOwnProperty("toString") && (this.toString = a.toString) }, clone: function () { return this.init.prototype.extend(this) } }, n = j.WordArray = f.extend({ init: function (a, c) { a = this.words = a || []; this.sigBytes = c != m ? c : 4 * a.length }, toString: function (a) { return (a || h).stringify(this) }, concat: function (a) { var c = this.words, q = a.words, d = this.sigBytes; a = a.sigBytes; this.clamp(); if (d % 4) for (var b = 0; b < a; b++) c[d + b >>> 2] |= (q[b >>> 2] >>> 24 - 8 * (b % 4) & 255) << 24 - 8 * ((d + b) % 4); else if (65535 < q.length) for (b = 0; b < a; b += 4) c[d + b >>> 2] = q[b >>> 2]; else c.push.apply(c, q); this.sigBytes += a; return this }, clamp: function () { var a = this.words, c = this.sigBytes; a[c >>> 2] &= 4294967295 << 32 - 8 * (c % 4); a.length = e.ceil(c / 4) }, clone: function () { var a = f.clone.call(this); a.words = this.words.slice(0); return a }, random: function (a) { for (var c = [], b = 0; b < a; b += 4) c.push(4294967296 * e.random() | 0); return new n.init(c, a) } }), b = p.enc = {}, h = b.Hex = { stringify: function (a) { var c = a.words; a = a.sigBytes; for (var b = [], d = 0; d < a; d++) { var f = c[d >>> 2] >>> 24 - 8 * (d % 4) & 255; b.push((f >>> 4).toString(16)); b.push((f & 15).toString(16)) } return b.join("") }, parse: function (a) { for (var c = a.length, b = [], d = 0; d < c; d += 2) b[d >>> 3] |= parseInt(a.substr(d, 2), 16) << 24 - 4 * (d % 8); return new n.init(b, c / 2) } }, g = b.Latin1 = { stringify: function (a) { var c = a.words; a = a.sigBytes; for (var b = [], d = 0; d < a; d++) b.push(String.fromCharCode(c[d >>> 2] >>> 24 - 8 * (d % 4) & 255)); return b.join("") }, parse: function (a) { for (var c = a.length, b = [], d = 0; d < c; d++) b[d >>> 2] |= (a.charCodeAt(d) & 255) << 24 - 8 * (d % 4); return new n.init(b, c) } }, r = b.Utf8 = { stringify: function (a) { try { return decodeURIComponent(escape(g.stringify(a))) } catch (c) { throw Error("Malformed UTF-8 data"); } }, parse: function (a) { return g.parse(unescape(encodeURIComponent(a))) } }, k = j.BufferedBlockAlgorithm = f.extend({ reset: function () { this._data = new n.init; this._nDataBytes = 0 }, _append: function (a) { "string" == typeof a && (a = r.parse(a)); this._data.concat(a); this._nDataBytes += a.sigBytes }, _process: function (a) { var c = this._data, b = c.words, d = c.sigBytes, f = this.blockSize, h = d / (4 * f), h = a ? e.ceil(h) : e.max((h | 0) - this._minBufferSize, 0); a = h * f; d = e.min(4 * a, d); if (a) { for (var g = 0; g < a; g += f) this._doProcessBlock(b, g); g = b.splice(0, a); c.sigBytes -= d } return new n.init(g, d) }, clone: function () { var a = f.clone.call(this); a._data = this._data.clone(); return a }, _minBufferSize: 0 }); j.Hasher = k.extend({ cfg: f.extend(), init: function (a) { this.cfg = this.cfg.extend(a); this.reset() }, reset: function () { k.reset.call(this); this._doReset() }, update: function (a) { this._append(a); this._process(); return this }, finalize: function (a) { a && this._append(a); return this._doFinalize() }, blockSize: 16, _createHelper: function (a) { return function (c, b) { return (new a.init(b)).finalize(c) } }, _createHmacHelper: function (a) { return function (b, f) { return (new s.HMAC.init(a, f)).finalize(b) } } }); var s = p.algo = {}; return p }(Math); (function () { var e = CryptoJS, m = e.lib, p = m.WordArray, j = m.Hasher, l = [], m = e.algo.SHA1 = j.extend({ _doReset: function () { this._hash = new p.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) }, _doProcessBlock: function (f, n) { for (var b = this._hash.words, h = b[0], g = b[1], e = b[2], k = b[3], j = b[4], a = 0; 80 > a; a++) { if (16 > a) l[a] = f[n + a] | 0; else { var c = l[a - 3] ^ l[a - 8] ^ l[a - 14] ^ l[a - 16]; l[a] = c << 1 | c >>> 31 } c = (h << 5 | h >>> 27) + j + l[a]; c = 20 > a ? c + ((g & e | ~g & k) + 1518500249) : 40 > a ? c + ((g ^ e ^ k) + 1859775393) : 60 > a ? c + ((g & e | g & k | e & k) - 1894007588) : c + ((g ^ e ^ k) - 899497514); j = k; k = e; e = g << 30 | g >>> 2; g = h; h = c } b[0] = b[0] + h | 0; b[1] = b[1] + g | 0; b[2] = b[2] + e | 0; b[3] = b[3] + k | 0; b[4] = b[4] + j | 0 }, _doFinalize: function () { var f = this._data, e = f.words, b = 8 * this._nDataBytes, h = 8 * f.sigBytes; e[h >>> 5] |= 128 << 24 - h % 32; e[(h + 64 >>> 9 << 4) + 14] = Math.floor(b / 4294967296); e[(h + 64 >>> 9 << 4) + 15] = b; f.sigBytes = 4 * e.length; this._process(); return this._hash }, clone: function () { var e = j.clone.call(this); e._hash = this._hash.clone(); return e } }); e.SHA1 = j._createHelper(m); e.HmacSHA1 = j._createHmacHelper(m) })(); return CryptoJS.SHA1(words).toString(); } // time33 哈希 , time33: function (words) { //# time33 哈希算法 words = words || ‘‘; //哈希time33算法 for (var i = 0, len = words.length, hash = 5381; i < len; ++i) { hash += (hash << 5) + words.charAt(i).charCodeAt(); }; return hash & 0x7fffffff; } }
浏览器检测方法集
Angela.browser = { //#浏览器 browsers: { //# 浏览器内核类别 weixin: /micromessenger(\/[\d\.]+)*/ //微信内置浏览器 , mqq: /mqqbrowser(\/[\d\.]+)*/ //手机QQ浏览器 , uc: /ucbrowser(\/[\d\.]+)*/ //UC浏览器 , chrome: /(?:chrome|crios)(\/[\d\.]+)*/ //chrome浏览器 , firefox: /firefox(\/[\d\.]+)*/ //火狐浏览器 , opera: /opera(\/|\s)([\d\.]+)*/ //欧朋浏览器 , sougou: /sogoumobilebrowser(\/[\d\.]+)*/ //搜狗手机浏览器 , baidu: /baidubrowser(\/[\d\.]+)*/ //百度手机浏览器 , 360: /360browser([\d\.]*)/ //360浏览器 , safari: /safari(\/[\d\.]+)*/ //苹果浏览器 , ie: /msie\s([\d\.]+)*/ // ie 浏览器 } //@errCall : 错误回调 , addFav: function (url, title, errCall) { //#加入收藏夹 try { window.external.addFavorite(url, title); } catch (e) { try { window.sidebar.addPanel(title, url, ‘‘); } catch (e) { errCall(); } } }, //浏览器版本 coreInit: function () { //#noadd var i = null , browsers = this.browsers , ua = window.navigator.userAgent.toLowerCase() , brower = ‘‘ , pos = 1 ; for (i in browsers) { if (brower = ua.match(browsers[i])) { if (i == ‘opera‘) { pos = 2; } else { pos = 1; } this.version = (brower[pos] || ‘‘).replace(/[\/\s]+/, ‘‘); this.core = i; return i; } } } // 检测IE版本 !仅支持IE: 5,6,7,8,9 版本 , ie: (function () { //# 检测IE版本 !仅支: ie5,6,7,8,9 var v = 3, div = document.createElement(‘div‘), all = div.getElementsByTagName(‘i‘); while ( div.innerHTML = ‘<!--[if gt IE ‘ + (++v) + ‘]><i></i><![endif]-->‘, all[0] ); return v > 4 ? v : false; })() , isWebkit: /webkit/i.test(navigator.userAgent) };
类型判断的方法
/* *判断变量val是不是整数类型 */ function isNumber(val) { return typeof val === ‘number‘ && isFinite(val); } /* *判断变量val是不是布尔类型 */ function isBoolean(val) { return typeof val === ‘boolean‘; } /* *判断变量val是不是字符串类型 */ function isString (val) { return typeof val === ‘string‘; } /* *判断变量val是不是undefined */ function isUndefined(val) { return typeof val === ‘undefined‘; } /* *判断变量val是不是对象 */ function isObj(str) { if (str===null||typeof str===‘undefined‘) { return false; } return typeof str === ‘object‘; } /* *判断变量val是不是null */ function isNull(val) { return val === null; } /* *判断变量arr是不是数组 *方法一 */ function isArray1(arr) { return Object.prototype.toString.apply(arr) === ‘[object Array]‘; } /* *判断变量arr是不是数组 *方法二 */ function isArray2(arr) { if (arr === null || typeof arr === ‘undefined‘) { return false; } return arr.constructor === Array; }
原文地址:https://www.cnblogs.com/tysk/p/10669626.html
时间: 2024-10-06 09:30:59