寻找薛定谔的猫

导航

 

封装了开发中常用的操作

并添加了一些扩展方法供调用

var util = {
//获取Url中的参数(不支持中文)
     getParams: function() {
        var url = location.search; //获取url中"?"符后的字串 
        var params = new Object();
        if (url.indexOf("?") != -1) {
            var str = url.substr(1);

            strs = str.split("&");
            for (var i = 0; i < strs.length; i++) {
                params[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
            }
        }
        return params;
    },
    //获取Url中的参数(支持中文)
    getUrlVars:function(){
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
        for (var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            //vars.push(hash[0]);
            vars[hash[0]] = decodeURI(hash[1]);
        }
        return vars;
    },
    //生成guid
    guid:function(){
        function S4() {
            return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
         }
         return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
    },
    security:{ 
        //加密字符串(明文,秘钥)
           encrypt:function(str,secretKey){
                if (secretKey == null || secretKey.length <= 0) {
                    return "Please enter a password with which to encrypt the message.";
                }
                var prand = "";
                for (var i = 0; i < secretKey.length; i++) {
                    prand += secretKey.charCodeAt(i).toString();
                }
                var sPos = Math.floor(prand.length / 5);
                var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos * 2) + prand.charAt(sPos * 3) + prand.charAt(sPos * 4) + prand.charAt(sPos * 5));
                var incr = Math.ceil(secretKey.length / 2);
                var modu = Math.pow(2, 31) - 1;
                if (mult < 2) {
                    return "Algorithm cannot find a suitable hash. Please choose a different password. \nPossible considerations are to choose a more complex or longer password.";
                    return null;
                }
                var salt = Math.round(Math.random() * 1000000000) % 100000000;
                prand += salt;
                while (prand.length > 10) {
                    prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
                }
                prand = (mult * prand + incr) % modu;
                var enc_chr = "";
                var enc_str = "";
                for (var i = 0; i < str.length; i++) {
                    enc_chr = parseInt(str.charCodeAt(i) ^ Math.floor((prand / modu) * 255));
                    if (enc_chr < 16) {
                        enc_str += "0" + enc_chr.toString(16);
                    } else enc_str += enc_chr.toString(16);
                    prand = (mult * prand + incr) % modu;
                }
                salt = salt.toString(16);
                while (salt.length < 8) salt = "0" + salt;
                enc_str += salt;
                return enc_str;
           },
           //解密字符串(密文,秘钥)
           decrypt:function(str, secretKey){
                if (str == null || str.length < 8) {
                    return "A salt value could not be extracted from the encrypted message because it's length is too short. The message cannot be decrypted.";
                }
                if (secretKey == null || secretKey.length <= 0) {
                    return "Please enter a password with which to decrypt the message.";
                }
                var prand = "";
                for (var i = 0; i < secretKey.length; i++) {
                    prand += secretKey.charCodeAt(i).toString();
                }
                var sPos = Math.floor(prand.length / 5);
                var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos * 2) + prand.charAt(sPos * 3) + prand.charAt(sPos * 4) + prand.charAt(sPos * 5));
                var incr = Math.round(secretKey.length / 2);
                var modu = Math.pow(2, 31) - 1;
                var salt = parseInt(str.substring(str.length - 8, str.length), 16);
                str = str.substring(0, str.length - 8);
                prand += salt;
                while (prand.length > 10) {
                    prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
                }
                prand = (mult * prand + incr) % modu;
                var enc_chr = "";
                var enc_str = "";
                for (var i = 0; i < str.length; i += 2) {
                    enc_chr = parseInt(parseInt(str.substring(i, i + 2), 16) ^ Math.floor((prand / modu) * 255));
                    enc_str += String.fromCharCode(enc_chr);
                    prand = (mult * prand + incr) % modu;
                }
                return enc_str;
           }
    },
    array:{
        uniq:function(arr){
            var temp = []; //一个新的临时数组
            for (var i = 0; i < arr.length; i++) {
                if (temp.indexOf(arr[i]) == -1) {
                    temp.push(arr[i]);
                }
            }
            return temp;
        },
        //ES6数组去重(适用于对象数组)
        uniqES6:function(arr){
            return Array.from(new Set(arr));
        },
        //将数组乱序输出
        upset:function (arr){
            return arr.sort(function(){ return Math.random() - 0.5});
        },
        //随机获取数组中的某个元素
        getRandomItem :function (arr) {
            return arr[Math.floor(Math.random() * arr.length)];
        },
        //返回某个元素在数组中出现的次数
        getCount:function (arr, ele) {
            var num = 0;
            for (var i = 0, len = arr.length; i < len; i++) {
            if (ele == arr[i]) {
                num++;
                }
            }
            return num;
        },
        //简单数组排序,针对数字数组 
        sort:function(arr,type){
            if(type=="desc"){
            arr.sort(function(a,b){
                return b-a ;
            }) ;
            }
            if(type=="asc"){
            arr.sort(function(a,b){
                return a-b ;
            }) ;
            }
            return arr ;
        },
        //数字数组
        getMaxMin:function(arr){
            return {max:Math.max.apply(null,arr),min:Math.min.apply(null,arr)}
        },
        removeItem: function (array, value) {
            remove(array, value);
            function remove(arr){
                var index = array.indexOf(value);
                if (index > -1) {
                    array.splice(index, 1);
                    remove(array,value);
                }
            }
   
        }
    },
    date:{
        //格式化日期字符串为指定格式
        format:function(str, format){
            if (str != null) {
                var date = new Date(parseInt(str.replace("/Date(", "").replace(")/", ""), 10));
                return getDateResult(date,format);
            }
        },
        getCurrent:function(format){
            var date = new Date();
            var month = date.getMonth() + 1;
            var strDate = date.getDate();
            if (month >= 1 && month <= 9) {
                month = "0" + month;
            }
            if (strDate >= 0 && strDate <= 9) {
                strDate = "0" + strDate;
            }
            return getDateResult(date,format);
        },
        //获取星期几
        getWeek:function(date){
            return "星期" + "日一二三四五六".charAt(new Date(date).getDay());
        },
        //为日期添加指定天数
        addDay:function(days,format){
            var date=new Date();
            date.setMilliseconds(date.getMilliseconds()+(days * 24 * 60 * 60 * 1000));
            return getDateResult(date,format);
        }
    },
    string:{
        //字母大小写切换 1:首字母大写 2:首页母小写 3:大小写转换 4:全部大写 5:全部小写
        changeCase: 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;
            }
        },
        //去除字符串最后一位
        removeLastChar:function(str){
            return str.substring(0, str.length - 1);
        },
        //判断是否中文 
        isChinese:function(str){
            var str = str.replace(/(^\s*)|(\s*$)/g,'');   
            return /^[\u4E00-\uFA29]*$/.test(str) && (!/^[\uE7C7-\uE7F3]*$/.test(str)); 
        },
        //判断是否包含中文
        isContainsChinese:function(str){
            var reg = new RegExp("[\\u4E00-\\u9FFF]+","g");
            return reg.test(str);
        },
        //判断是否为邮箱
        isEmail:function(str){
            return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
        },
        //判断是否为IP
        isIP:function(str){
            var reg = /^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$/;   
            return reg.test(str); 
        },
        //判断是否为身份证(只考虑数字长度和结尾X)
        isIDCard:function(str){
             var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
            return reg.test(str);
        },
        //判断是否为手机号码
        isMobile:function(str){
            return /^1[35]\d{9}/.test(str);
        },
        isTel:function(str){
            return /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/.test(str);
        },
        //判断是否为数字(整数/小数)
        isNumber:function(str){
            return /^(-?\d+)(\.\d+)?$/.test(str);
        },
        //逆序
        reverse:function(str){
            return str.split("").reverse().join("");
        },
        //保留数字 
        getNum:function(str){
            return str.replace(/[^d]/g, "");
        }
    },
    localStorage:{
        get:function(key){
            return window.localStorage.getItem(key);
        },
        set:function(key,value){
            window.localStorage.setItem(key, value);
        }
    },
    //用户关闭具体的浏览器标签页,数据也会被删除
    sessionStorage:{
        get:function(key){
            return window.sessionStorage.getItem(key);
        },
        set:function(key,value){
            window.sessionStorage.setItem(key, value);
        }
    }
}


function getDateResult(date,format){
    var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
    var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
    var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
    var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
    var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
    if (format == 'datetime')
        return date.getFullYear() + "-" + month + "-" + day + ' ' + hours + ':' + minutes + ':' + seconds;
    else if (format == 'datetimeshort')
        return date.getFullYear() + "-" + month + "-" + day + ' ' + hours + ':' + minutes;
    else if (format == 'date')
        return date.getFullYear() + "-" + month + "-" + day;
    else if (format == 'cdate')
        return date.getFullYear() + "年" + month + "月" + day + '日';
    else if(format == 'cdatefull')
    return date.getFullYear() + "年" + month + "月" + day + '日' + ' ' +  hours + '点' + minutes + '分' + seconds + '秒';
}

/*================扩展方法===================*/
//判断字符串是否以某字符结尾
String.prototype.endWith = function (str) {
    var d = this.length - str.length;
    return (d >= 0 && this.lastIndexOf(str) == d)
}
//判断字符串是否以某字符开始
String.prototype.startWith = function (str) {
   var reg = new RegExp("^" + str);
   return reg.test(this);
}
//去除前后空格
String.prototype.trim = function () {
    return this.replace(/(^\s*)|(\s*$)/g, "");
}
//去除所有空格
String.prototype.atrim = function () {
    return this.replace(/\s+/g,'');
}

String.prototype.ltrim = function(c)  {  
    if(c){
        if(c.constructor == Number && c > 0){
            //参数为整数,删除指定位数的字符
            var str = this.substr(0,c);
            return this.replace(new RegExp("^"+str+"*"), '');
        }
        //删除尾部指定字符串
        return this.replace(new RegExp("^"+c+"*"), '');
    }else{
        //不传参,删除字符串尾部所有空格
        return this.replace(/(^\s*)/g, "");
    }
}
String.prototype.rtrim = function (c) {
    if(c){
        if(c.constructor == Number && c > 0){
            //参数为整数,删除指定位数的字符
            var str = this.substr(this.length-c);
            return this.replace(new RegExp(""+str+"$"), '');
        }
        //删除尾部指定字符串
        return this.replace(new RegExp(""+c+"$"), '');
    }else{
        //不传参,删除字符串尾部所有空格
        return this.replace(/(\s*$)/g, "");
    }
}
//数组添加元素
Array.prototype.add = function(item){
    this.push(item);
}
//数组添加多个元素
Array.prototype.addRange = function(items){
    var length = items.length;
    if(length!=0){
        for (var index = 0; index < length; index++) {
           this.push(items[index]);          
        }
     }
}
//清空数组
Array.prototype.clear = function(){
     if(this.length>0){
         this.splice(0,this.length);
     }
}
//数组是否为空
Array.prototype.isEmpty = function(){
     if(this.length == 0){
       return true;
     }
     else{
       return false;
     }
}
//克隆数组
Array.prototype.clone = function(){
     var clonedArray = [];
     var length = this.length;
     for (var index = 0; index < length; index++) {
         clonedArray[index] = this[index];
     }
     return clonedArray;
}
//数组是否包含元素
Array.prototype.contains = function(item){
     var index = this.indexOf(item);
     return (index>=0);
}
//把数组的第一个元素从其中删除,并返回第一个元素的值
Array.prototype.dequeue = function(){
    return this.shift();
}
//返回指定值的下标
Array.prototype.indexOf = function(item){
    var length = this.length;
    if(length!=0){
       for (var index = 0; index < length; index++) {
          if(this[index] == item){
              return index;
          }
        }
     }
     return -1;
}
//向/从数组中添加/删除项目,然后返回被删除的项目
Array.prototype.insert = function(index,item){
     this.splice(index,0,item);
}
//移除指定元素
Array.prototype.remove = function(item){
     var array = this;
     remove(array,item);    
     function remove(array,item) {
        var index = array.indexOf(item);
        if(index >= 0){
            array.splice(index,1);
            remove(array,item);
        }
     }
}
//移除指定下标的元素
Array.prototype.removeAt = function(index){
     this.splice(index,1);
}
//获取字符数组 
String.prototype.toCharArray = function(){
    return this.split("");
} 

 

posted on 2019-02-26 15:46  teagueli  阅读(397)  评论(0编辑  收藏  举报