lyjutils.js javascript 工具类

收集整理的常用js,部分方法依赖jquery

/**
 * 常用js工具类
 * [lyj 收集整理]
 * @type {Object}
 */
 
var lyj = (function(window, document, $) {
 
    var count = 1000;
 
    var browser = (function(){
 
        var versions = function() {  
                var u = navigator.userAgent, app = navigator.appVersion;    
 
                //移动终端浏览器版本信息  
                return {         
                    //IE内核  
                    trident: u.indexOf('Trident') > -1, 
                    presto: u.indexOf('Presto') > -1, //opera内核  
                    webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核  
                    gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核  
                    mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端  
                    ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端  
                    android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器  
                    iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器  
                    iPad: u.indexOf('iPad') > -1, //是否iPad  
                    webApp: u.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部  
                    html5plus:u.indexOf('Html5Plus') > -1
                };  
            }
 
        var language = (navigator.browserLanguage || navigator.language).toLowerCase();
 
        return {
            versions : versions,
            language : language
        };
    })();
 
 
    var tools = { 
        // test
        test : function(){
            alert("测试必须有");       
 
            console.log(browser);
        },
 
        /**
         * @title  ajax封装
         * @author lyj [author] [2018-06-13]
         * @param  {[type]} url      [description]
         * @param  {[type]} data     [description]
         * @param  {[type]} success  [description]
         * @param  {[type]} cache    [description]
         * @param  {[type]} alone    [description]
         * @param  {[type]} async    [description]
         * @param  {[type]} type     [description]
         * @param  {[type]} dataType [description]
         * @param  {[type]} error    [description]
         * @return {[type]}          [description]
         */
        ajaxReturn : function(url, data, success, cache, alone, async, type, dataType, error) {
            //请求类型
            var type     = type || 'post'; 
            //接收数据类型
            var dataType = dataType || 'json'; 
            //异步请求
            var async    = async || true; 
            //独立提交(一次有效的提交)
            var alone    = alone || false; 
            //浏览器历史缓存
            var cache    = cache || false; 
            // 成功
            var success = success ||
                function(data) {
                    setTimeout(function() {            
                        lyjalert(data.info);
                    },
                    500);
 
                    if (data.status) {
                        setTimeout(function() {
                            if (data.url) {
                                location.replace(data.url);
                            } else {
                                location.reload(true);
                            }
                        },
                        1500);
                    }  
                };
            // 失败
            var error = error ||
                function(data) {
                    setTimeout(function() {
                        if (data.status == 404) {
                            lyjalert('请求失败,请求未找到');
                        } else if (data.status == 503) {
                            lyjalert('请求失败,服务器内部错误');
                        } else {
                            lyjalert('请求失败,网络连接超时');
                        }
                        
                    },
                    500);
                };
 
            $.ajax({
                'url': url,
                'data': data,
                'type': type,
                'dataType': dataType,
                'async': async,
                'success': success,
                'error': error,
                'jsonpCallback': 'jsonp' + (new Date()).valueOf().toString().substr( - 4),
                'beforeSend': function() {
                    // lyjalert('loading');            
                },
            });
        },
 
 
        /**
         * @title  检测 页面类型
         * @author lyj [author] [2018-05-21]
         * @return {[type]} [description]
         */
        checktype : function(){
            var res = "";
            var arr = [];
            //判断是否是移动设备打开  
            if (browser.versions.mobile) {
                res += "||移动设备打开"; 
                arr['mobile'] = 1;
 
                //获取判断用的对象  
                var ua = navigator.userAgent.toLowerCase();
                //在微信中打开            
                if (ua.match(/MicroMessenger/i) == "micromessenger") {  
                    // alert("weixin");  
                    res += "||weixin";  
                    arr['weixin'] = 1;  
                }
                //在新浪微博客户端打开 
                if (ua.match(/WeiBo/i) == "weibo") { 
                    // alert("weibo"); 
                    res += "||weibo"; 
                    arr['weibo'] = 1;       
                } 
                if (ua.match(/QQ/i) == "qq") { 
                    // alert("QQ"); 
                    res += "||QQ";
                    arr['QQ'] = 1;  
                } 
                if(/alipay/ig.test(ua)){ 
                    // alert("支付宝"); 
                    res += "||支付宝";
                    arr['支付宝'] = 1; 
                } 
 
                //是否在IOS浏览器打开 
                if (browser.versions.ios) { 
                    // app 打开
                    if(browser.versions.html5plus){
                        res += "||苹果app打开";     
                        arr['iosapp'] = 1;               
                    } else {
                        res += "||苹果浏览器打开"; 
                        arr['iosbrowser'] = 1;                                              
                    }
                }  
                //是否在安卓浏览器打开 
                if(browser.versions.android){               
                    // app 打开
                    if(browser.versions.html5plus){
                        res += "||安卓app打开";  
                        arr['androidapp'] = 1;               
                    } else {      
                        res += "||安卓浏览器打开";  
                        arr['androidbrowser'] = 1;              
                    }
                }  
            } else {
                res += "||PC浏览器打开"; 
                arr['pc'] = 1;  
            }  
 
 
            // 安卓浏览器打开
            // if(arr['mobile']&&arr['androidbrowser']){
            //  alert('安卓浏览器打开');
            // }
            console.info(arr);
 
            return arr;
 
        },
 
        // 获取 input name[] 数组的值
        my_array_name : function(namestr) {
            var valArr = new Array;
            $("input[name='" + namestr + "[]']").each(function(i) {
                valArr[i] = $(this).val();
            });
            // var priv = valArr.join(',');
            return valArr;
        },
 
        // 模板赋值
        assignModel : function(tpl, model){
            return tpl.replace(/\{([\w,-]+)\}/ig, function(matched, key){
                return model[key];
            }); 
        },
 
        /**
         * @title  循环赋值
         * @author lyj [author] [2018-06-11]
         * @param  {[type]} id    [模板id 或 class]
         * @param  {[type]} data  [数组数据]
         * @param  {[type]} outid [追加数据的div]
         * @return {[type]}       [description]
         */
        assignTbody : function(id, data, outid){
            // 追加还是替换
            var type = arguments[3] ? arguments[3] : 0;
 
            // 获取模板数据
            var tpl = $(id).html();    
 
            // 新模板数据
            var newTpl = '';
            // 遍历数据,替换到新模板
            for (x in data){
                newTpl += this.assignModel(tpl, data[x]);                 
            }           
            
            // 替换
            if(type == 0){
                // 替换数据
                $(outid).html(newTpl);            
            } else {
                // 追加数据 
                $(outid).append(newTpl);
            }
 
        },
 
        /**
         * @title  循环替换数据到 模板
         * @author lyj [author] [2018-06-25]
         * @param  {[type]} id   [description]
         * @param  {[type]} data [description]
         * @return {[type]}      [description]
         */
        assignDatas: function(id, data){  
            // 获取模板数据
            var tpl = $(id).html();
            // 新模板数据
            var newTpl = '';
            // 遍历数据,替换到新模板
            for (x in data){
                newTpl += lyj.assignModel(tpl, data[x]);                 
            } 
            return newTpl;
        },
 
        /**
         * @title  找到第一个祖先元素
         * @author lyj [author] [2018-05-21]
         * @param  {[type]} objM [description]
         * @param  {[type]} objP [description]
         * @return {[type]}      [description]
         */
        findFirstElement : function(objM,objP){
            return $(objM).closest(objP);
        },
 
        /**
         * @title 删除 第一个祖先元素
         * @author lyj [author] [2018-05-21]
         * @param  {[type]} objM [自己]
         * @param  {[type]} objP [祖先]
         * @return {[type]}      [description]
         */
        removeFirstElement : function(objM,objP){
 
            return $(objM).closest(objP).remove();
        },
 
        copyToClipboard : function(str){
            var textToClipboard = str;
 
            var success = true;
            if (window.clipboardData) { // Internet Explorer
                window.clipboardData.setData("Text", textToClipboard);
            } else {
                // create a temporary element for the execCommand method
                var forExecElement = this.createElementForExecCommand(textToClipboard);
 
                /* Select the contents of the element 
                        (the execCommand for 'copy' method works on the selection) */
                this.selectContent(forExecElement);
 
                var supported = true;
 
                // UniversalXPConnect privilege is required for clipboard access in Firefox
                try {
                    if (window.netscape && netscape.security) {
                        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
                    }
 
                    // Copy the selected content to the clipboard
                    // Works in Firefox and in Safari before version 5
                    success = document.execCommand("copy", false, null);
                } catch(e) {
                    success = false;
                }
 
                // remove the temporary element
                document.body.removeChild(forExecElement);
            }
 
            if (success) {
                alert("The text is on the clipboard, try to paste it!");
            } else {
                alert("Your browser doesn't allow clipboard access!");
            }
        },
 
        createElementForExecCommand : function(textToClipboard){
            var forExecElement = document.createElement("div");
            // place outside the visible area
            forExecElement.style.position = "absolute";
            forExecElement.style.left = "-10000px";
            forExecElement.style.top = "-10000px";
            // write the necessary text into the element and append to the document
            forExecElement.textContent = textToClipboard;
            document.body.appendChild(forExecElement);
            // the contentEditable mode is necessary for the  execCommand method in Firefox
            forExecElement.contentEditable = true;
 
            return forExecElement;
        },
 
        selectContent : function(element){
            // first create a range
            var rangeToSelect = document.createRange();
            rangeToSelect.selectNodeContents(element);
 
            // select the contents
            var selection = window.getSelection();
            selection.removeAllRanges();
            selection.addRange(rangeToSelect);
        },
 
        /**
         * @title  格式化json字符串 基于c.js
         * @author lyj [author] [2018-05-21]
         * @param  {[type]} jsonstr [description]
         * @return {[type]}         [description]
         */
        formatjson : function(jsonstr){
            window.TAB = MultiplyString(2, window.SINGLE_TAB);
            var html = "";
            try {
                if (jsonstr == "") jsonstr = "\"\"";
                var obj = eval("[" + jsonstr + "]");
                html = ProcessObject(obj[0], 0, false, false, false);
                return "<PRE class='CodeContainer'>" + html + "</PRE>";      
            } catch(e) {
                alert("JSON数据格式不正确:\n" + e.message);       
            }
        },
 
 
        /******************************日期时间[datetime]类js***********************************/    
        datetimeUtils : {
            patterns: {  
                PATTERN_ERA: 'G', //Era 标志符 Era strings. For example: "AD" and "BC"  
                PATTERN_YEAR: 'y', //年  
                PATTERN_MONTH: 'M', //月份  
                PATTERN_DAY_OF_MONTH: 'd', //月份的天数  
                PATTERN_HOUR_OF_DAY1: 'k', //一天中的小时数(1-24)  
                PATTERN_HOUR_OF_DAY0: 'H', //24小时制,一天中的小时数(0-23)  
                PATTERN_MINUTE: 'm', //小时中的分钟数  
                PATTERN_SECOND: 's', //秒  
                PATTERN_MILLISECOND: 'S', //毫秒  
                PATTERN_DAY_OF_WEEK: 'E', //一周中对应的星期,如星期一,周一  
                PATTERN_DAY_OF_YEAR: 'D', //一年中的第几天  
                PATTERN_DAY_OF_WEEK_IN_MONTH: 'F', //一月中的第几个星期(会把这个月总共过的天数除以7,不够准确,推荐用W)  
                PATTERN_WEEK_OF_YEAR: 'w', //一年中的第几个星期  
                PATTERN_WEEK_OF_MONTH: 'W', //一月中的第几星期(会根据实际情况来算)  
                PATTERN_AM_PM: 'a', //上下午标识  
                PATTERN_HOUR1: 'h', //12小时制 ,am/pm 中的小时数(1-12)  
                PATTERN_HOUR0: 'K', //和h类型  
                PATTERN_ZONE_NAME: 'z', //时区名  
                PATTERN_ZONE_VALUE: 'Z', //时区值  
                PATTERN_WEEK_YEAR: 'Y', //和y类型  
                PATTERN_ISO_DAY_OF_WEEK: 'u',  
                PATTERN_ISO_ZONE: 'X'  
            },  
            week: {  
                'ch': {  
                    "0": "\u65e5",  
                    "1": "\u4e00",  
                    "2": "\u4e8c",  
                    "3": "\u4e09",  
                    "4": "\u56db",  
                    "5": "\u4e94",  
                    "6": "\u516d"  
                },  
                'en': {  
                    "0": "Sunday",  
                    "1": "Monday",  
                    "2": "Tuesday",  
                    "3": "Wednesday",  
                    "4": "Thursday",  
                    "5": "Friday",  
                    "6": "Saturday"  
                }  
            },  
            //获取当前时间  
            getCurrentTime: function() {  
                var today = new Date();  
                var year = today.getFullYear();  
                var month = today.getMonth() + 1;  
                var day = today.getDate();  
                var hours = today.getHours();  
                var minutes = today.getMinutes();  
                var seconds = today.getSeconds();  
                var timeString = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;  
                return timeString;  
            },  
            /* 
             * 比较时间大小 
             * time1>time2 return 1 
             * time1<time2 return -1 
             * time1==time2 return 0 
             */  
            compareTime: function(time1, time2) {  
                if(Date.parse(time1.replace(/-/g, "/")) > Date.parse(time2.replace(/-/g, "/"))) {  
                    return 1;  
                } else if(Date.parse(time1.replace(/-/g, "/")) < Date.parse(time2.replace(/-/g, "/"))) {  
                    return -1;  
                } else if(Date.parse(time1.replace(/-/g, "/")) == Date.parse(time2.replace(/-/g, "/"))) {  
                    return 0;  
                }  
            },  
            //是否闰年  
            isLeapYear: function(year) {  
                return((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);  
            },  
            //获取某个月的天数,从0开始  
            getDaysOfMonth: function(year, month) {  
                return [31, (this.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];  
            },  
            getDaysOfMonth2: function(year, month) {  
                // 将天置为0,会获取其上个月的最后一天  
                month = parseInt(month) + 1;  
                var date = new Date(year, month, 0);  
                return date.getDate();  
            },  
            /*距离现在几天的日期:负数表示今天之前的日期,0表示今天,整数表示未来的日期 
             * 如-1表示昨天的日期,0表示今天,2表示后天 
             */  
            fromToday: function(days) {  
                var today = new Date();  
                today.setDate(today.getDate() + days);  
                var date = today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate();  
                return date;  
            },  
            /** 
             * 日期时间格式化 
             * @param {Object} dateTime 需要格式化的日期时间 
             * @param {String} pattern  格式化的模式,如yyyy-MM-dd hh(HH):mm:ss.S a k K E D F w W z Z 
             */  
            formt: function(dateTime, pattern) {  
                var date = new Date(dateTime);  
                if(Bee.StringUtils.isBlank(pattern)) {  
                    return date.toLocaleString();  
                }  
                return pattern.replace(/([a-z])\1*/ig, function(matchStr, group1) {  
                    var replacement = "";  
                    switch(group1) {  
                        case Bee.DateUtils.patterns.PATTERN_ERA: //G  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_WEEK_YEAR: //Y  
                        case Bee.DateUtils.patterns.PATTERN_YEAR: //y  
                            replacement = date.getFullYear();  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_MONTH: //M  
                            var month = date.getMonth() + 1;  
                            replacement = (month < 10 && matchStr.length >= 2) ? "0" + month : month;  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_DAY_OF_MONTH: //d  
                            var days = date.getDate();  
                            replacement = (days < 10 && matchStr.length >= 2) ? "0" + days : days;  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_HOUR_OF_DAY1: //k(1~24)  
                            var hours24 = date.getHours();  
                            replacement = hours24;  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_HOUR_OF_DAY0: //H(0~23)  
                            var hours24 = date.getHours();  
                            replacement = (hours24 < 10 && matchStr.length >= 2) ? "0" + hours24 : hours24;  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_MINUTE: //m  
                            var minutes = date.getMinutes();  
                            replacement = (minutes < 10 && matchStr.length >= 2) ? "0" + minutes : minutes;  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_SECOND: //s  
                            var seconds = date.getSeconds();  
                            replacement = (seconds < 10 && matchStr.length >= 2) ? "0" + seconds : seconds;  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_MILLISECOND: //S  
                            var milliSeconds = date.getMilliseconds();  
                            replacement = milliSeconds;  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_DAY_OF_WEEK: //E  
                            var day = date.getDay();  
                            replacement = Bee.DateUtils.week['ch'][day];  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_DAY_OF_YEAR: //D  
                            replacement = Bee.DateUtils.dayOfTheYear(date);  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_DAY_OF_WEEK_IN_MONTH: //F  
                            var days = date.getDate();  
                            replacement = Math.floor(days / 7);  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_WEEK_OF_YEAR: //w  
                            var days = Bee.DateUtils.dayOfTheYear(date);  
                            replacement = Math.ceil(days / 7);  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_WEEK_OF_MONTH: //W  
                            var days = date.getDate();  
                            replacement = Math.ceil(days / 7);  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_AM_PM: //a  
                            var hours24 = date.getHours();  
                            replacement = hours24 < 12 ? "\u4e0a\u5348" : "\u4e0b\u5348";  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_HOUR1: //h(1~12)  
                            var hours12 = date.getHours() % 12 || 12; //0转为12  
                            replacement = (hours12 < 10 && matchStr.length >= 2) ? "0" + hours12 : hours12;  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_HOUR0: //K(0~11)  
                            var hours12 = date.getHours() % 12;  
                            replacement = hours12;  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_ZONE_NAME: //z  
                            replacement = Bee.DateUtils.getZoneNameValue(date)['name'];  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_ZONE_VALUE: //Z  
                            replacement = Bee.DateUtils.getZoneNameValue(date)['value'];  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_ISO_DAY_OF_WEEK: //u  
                            break;  
                        case Bee.DateUtils.patterns.PATTERN_ISO_ZONE: //X  
                            break;  
                        default:  
                            break;  
                    }  
                    return replacement;  
                });  
            },  
            /** 
             * 计算一个日期是当年的第几天 
             * @param {Object} date 
             */  
            dayOfTheYear: function(date) {  
                var obj = new Date(date);  
                var year = obj.getFullYear();  
                var month = obj.getMonth(); //从0开始  
                var days = obj.getDate();  
                var daysArr = [31, (this.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];  
                for(var i = 0; i < month; i++) {  
                    days += daysArr[i];  
                }  
                return days;  
            },  
            //获得时区名和值  
            getZoneNameValue: function(dateObj) {  
                var date = new Date(dateObj);  
                date = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));  
                var arr = date.toString().match(/([A-Z]+)([-+]\d+:?\d+)/);  
                var obj = {  
                    'name': arr[1],  
                    'value': arr[2]  
                };  
                return obj;  
            }  
        },
        /******************************日期时间[datetime]类js***********************************/
 
        /******************************数字[number]类js***********************************/
        numberUtils : {
            change_to_Chinese: function(Num) {
                //判断如果传递进来的不是字符的话转换为字符
                if (typeof Num == "number") {
                    Num = new String(Num);
                };
                Num = Num.replace(/,/g, "") //替换tomoney()中的“,”
                Num = Num.replace(/ /g, "") //替换tomoney()中的空格
                Num = Num.replace(/¥/g, "") //替换掉可能出现的¥字符
                if (isNaN(Num)) { //验证输入的字符是否为数字
                    //alert("请检查小写金额是否正确");
                    return "";
                };
                //字符处理完毕后开始转换,采用前后两部分分别转换
                var part = String(Num).split(".");
                var newchar = "";
                //小数点前进行转化
                for (i = part[0].length - 1; i >= 0; i--) {
                    if (part[0].length > 10) {
                        return "";
                        //若数量超过拾亿单位,提示
                    }
                    var tmpnewchar = ""
                    var perchar = part[0].charAt(i);
                    switch (perchar) {
                    case "0":
                        tmpnewchar = "零" + tmpnewchar;
                        break;
                    case "1":
                        tmpnewchar = "壹" + tmpnewchar;
                        break;
                    case "2":
                        tmpnewchar = "贰" + tmpnewchar;
                        break;
                    case "3":
                        tmpnewchar = "叁" + tmpnewchar;
                        break;
                    case "4":
                        tmpnewchar = "肆" + tmpnewchar;
                        break;
                    case "5":
                        tmpnewchar = "伍" + tmpnewchar;
                        break;
                    case "6":
                        tmpnewchar = "陆" + tmpnewchar;
                        break;
                    case "7":
                        tmpnewchar = "柒" + tmpnewchar;
                        break;
                    case "8":
                        tmpnewchar = "捌" + tmpnewchar;
                        break;
                    case "9":
                        tmpnewchar = "玖" + tmpnewchar;
                        break;
                    }
                    switch (part[0].length - i - 1) {
                    case 0:
                        tmpnewchar = tmpnewchar + "元";
                        break;
                    case 1:
                        if (perchar != 0) tmpnewchar = tmpnewchar + "拾";
                        break;
                    case 2:
                        if (perchar != 0) tmpnewchar = tmpnewchar + "佰";
                        break;
                    case 3:
                        if (perchar != 0) tmpnewchar = tmpnewchar + "仟";
                        break;
                    case 4:
                        tmpnewchar = tmpnewchar + "万";
                        break;
                    case 5:
                        if (perchar != 0) tmpnewchar = tmpnewchar + "拾";
                        break;
                    case 6:
                        if (perchar != 0) tmpnewchar = tmpnewchar + "佰";
                        break;
                    case 7:
                        if (perchar != 0) tmpnewchar = tmpnewchar + "仟";
                        break;
                    case 8:
                        tmpnewchar = tmpnewchar + "亿";
                        break;
                    case 9:
                        tmpnewchar = tmpnewchar + "拾";
                        break;
                    }
                    var newchar = tmpnewchar + newchar;
                }
                //小数点之后进行转化
                if (Num.indexOf(".") != -1) {
                    if (part[1].length > 2) {
                        // alert("小数点之后只能保留两位,系统将自动截断");
                        part[1] = part[1].substr(0, 2)
                    }
                    for (i = 0; i < part[1].length; i++) {
                        tmpnewchar = "";
                        perchar = part[1].charAt(i); 
                        switch (perchar) {
                        case "0":
                            tmpnewchar = "零" + tmpnewchar;
                            break;
                        case "1":
                            tmpnewchar = "壹" + tmpnewchar;
                            break;
                        case "2":
                            tmpnewchar = "贰" + tmpnewchar;
                            break;
                        case "3":
                            tmpnewchar = "叁" + tmpnewchar;
                            break;
                        case "4":
                            tmpnewchar = "肆" + tmpnewchar;
                            break;
                        case "5":
                            tmpnewchar = "伍" + tmpnewchar;
                            break;
                        case "6":
                            tmpnewchar = "陆" + tmpnewchar;
                            break;
                        case "7":
                            tmpnewchar = "柒" + tmpnewchar;
                            break;
                        case "8":
                            tmpnewchar = "捌" + tmpnewchar;
                            break;
                        case "9":
                            tmpnewchar = "玖" + tmpnewchar;
                            break;
                        }
                        if (i == 0) tmpnewchar = tmpnewchar + "角";
                        if (i == 1) tmpnewchar = tmpnewchar + "分";
                        newchar = newchar + tmpnewchar;
                    }
                }
                //替换所有无用汉字
                while (newchar.search("零零") != -1) newchar = newchar.replace("零零", "零");
                newchar = newchar.replace("零亿", "亿");
                newchar = newchar.replace("亿万", "亿");
                newchar = newchar.replace("零万", "万");
                newchar = newchar.replace("零元", "元");
                newchar = newchar.replace("零角", "");
                newchar = newchar.replace("零分", "");
                if (newchar.charAt(newchar.length - 1) == "元") {
                    newchar = newchar + "整"
                }
                return newchar;
            },
        },    
        /******************************数字[number]类js***********************************/
        
 
        /******************************字符串[string]类js***********************************/
        stringUtils : {
            /**
             * @title  字符串是空
             * @author lyj [author] [2018-05-23]
             * @param  {[type]}  input [description]
             * @return {Boolean}       [description]
             */
            isEmpty: function(input) {
                return input == null || input == '';
            },
            isNotEmpty: function(input) {
                return !this.isEmpty(input);
            },
            isBlank: function(input) {
                return input == null || /^\s*$/.test(input);
            },
            isNotBlank: function(input) {
                return !this.isBlank(input);
            },
            trim: function(input) {
                return input.replace(/^\s+|\s+$/, '');
            },
            trimToEmpty: function(input) {
                return input == null ? "" : this.trim(input);
            },
            startsWith: function(input, prefix) {
                return input.indexOf(prefix) === 0;
            },
            endsWith: function(input, suffix) {
                return input.lastIndexOf(suffix) === 0;
            },
            contains: function(input, searchSeq) {
                return input.indexOf(searchSeq) >= 0;
            },
            equals: function(input1, input2) {
                return input1 == input2;
            },
            equalsIgnoreCase: function(input1, input2) {
                return input1.toLocaleLowerCase() == input2.toLocaleLowerCase();
            },
            containsWhitespace: function(input) {
                return this.contains(input, ' ');
            },
            //生成指定个数的字符
            repeat: function(ch, repeatTimes) {
                var result = "";
                for(var i = 0; i < repeatTimes; i++) {
                    result += ch;
                }
                return result;
            },
            deleteWhitespace: function(input) {
                return input.replace(/\s+/g, '');
            },
            rightPad: function(input, size, padStr) {
                return input + this.repeat(padStr, size);
            },
            leftPad: function(input, size, padStr) {
                return this.repeat(padStr, size) + input;
            },
            //首小写字母转大写
            capitalize: function(input) {
                var strLen = 0;
                if(input == null || (strLen = input.length) == 0) {
                    return input;
                }
                return input.replace(/^[a-z]/, function(matchStr) {
                    return matchStr.toLocaleUpperCase();
                });
            },
            //首大写字母转小写
            uncapitalize: function(input) {
                var strLen = 0;
                if(input == null || (strLen = input.length) == 0) {
                    return input;
                }
                return input.replace(/^[A-Z]/, function(matchStr) {
                    return matchStr.toLocaleLowerCase();
                });
            },
            //大写转小写,小写转大写
            swapCase: function(input) {
                return input.replace(/[a-z]/ig, function(matchStr) {
                    if(matchStr >= 'A' && matchStr <= 'Z') {
                        return matchStr.toLocaleLowerCase();
                    } else if(matchStr >= 'a' && matchStr <= 'z') {
                        return matchStr.toLocaleUpperCase();
                    }
                });
            },
            //统计含有的子字符串的个数
            countMatches: function(input, sub) {
                if(this.isEmpty(input) || this.isEmpty(sub)) {
                    return 0;
                }
                var count = 0;
                var index = 0;
                while((index = input.indexOf(sub, index)) != -1) {
                    index += sub.length;
                    count++;
                }
                return count;
            },
            //只包含字母
            isAlpha: function(input) {
                return /^[a-z]+$/i.test(input);
            },
            //只包含字母、空格
            isAlphaSpace: function(input) {
                return /^[a-z\s]*$/i.test(input);
            },
            //只包含字母、数字
            isAlphanumeric: function(input) {
                return /^[a-z0-9]+$/i.test(input);
            },
            //只包含字母、数字和空格
            isAlphanumericSpace: function(input) {
                return /^[a-z0-9\s]*$/i.test(input);
            },
            //数字
            isNumeric: function(input) {
                return /^(?:[1-9]\d*|0)(?:\.\d+)?$/.test(input);
            },
            //小数
            isDecimal: function(input) {
                return /^[-+]?(?:0|[1-9]\d*)\.\d+$/.test(input);
            },
            //负小数
            isNegativeDecimal: function(input) {
                return /^\-?(?:0|[1-9]\d*)\.\d+$/.test(input);
            },
            //正小数
            isPositiveDecimal: function(input) {
                return /^\+?(?:0|[1-9]\d*)\.\d+$/.test(input);
            },
            //整数
            isInteger: function(input) {
                return /^[-+]?(?:0|[1-9]\d*)$/.test(input);
            },
            //正整数
            isPositiveInteger: function(input) {
                return /^\+?(?:0|[1-9]\d*)$/.test(input);
            },
            //负整数
            isNegativeInteger: function(input) {
                return /^\-?(?:0|[1-9]\d*)$/.test(input);
            },
            //只包含数字和空格
            isNumericSpace: function(input) {
                return /^[\d\s]*$/.test(input);
            },
            isWhitespace: function(input) {
                return /^\s*$/.test(input);
            },
            isAllLowerCase: function(input) {
                return /^[a-z]+$/.test(input);
            },
            isAllUpperCase: function(input) {
                return /^[A-Z]+$/.test(input);
            },
            defaultString: function(input, defaultStr) {
                return input == null ? defaultStr : input;
            },
            defaultIfBlank: function(input, defaultStr) {
                return this.isBlank(input) ? defaultStr : input;
            },
            defaultIfEmpty: function(input, defaultStr) {
                return this.isEmpty(input) ? defaultStr : input;
            },
            //字符串反转
            reverse: function(input) {
                if(this.isBlank(input)) {
                    input;
                }
                return input.split("").reverse().join("");
            },
            //删掉特殊字符(英文状态下)
            removeSpecialCharacter: function(input) {
                return input.replace(/[!-/:-@\[-`{-~]/g, "");
            },
            //只包含特殊字符、数字和字母(不包括空格,若想包括空格,改为[ -~])
            isSpecialCharacterAlphanumeric: function(input) {
                return /^[!-~]+$/.test(input);
            },
            /**
             * 校验时排除某些字符串,即不能包含某些字符串
             * @param {Object} conditions:里面有多个属性,如下:
             * 
             * @param {String} matcherFlag 匹配标识
             * 0:数字;1:字母;2:小写字母;3:大写字母;4:特殊字符,指英文状态下的标点符号及括号等;5:中文;
             * 6:数字和字母;7:数字和小写字母;8:数字和大写字母;9:数字、字母和特殊字符;10:数字和中文;
             * 11:小写字母和特殊字符;12:大写字母和特殊字符;13:字母和特殊字符;14:小写字母和中文;15:大写字母和中文;
             * 16:字母和中文;17:特殊字符、和中文;18:特殊字符、字母和中文;19:特殊字符、小写字母和中文;20:特殊字符、大写字母和中文;
             * 100:所有字符;
             * @param {Array} excludeStrArr 排除的字符串,数组格式
             * @param {String} length 长度,可为空。1,2表示长度1到2之间;10,表示10个以上字符;5表示长度为5
             * @param {Boolean} ignoreCase 是否忽略大小写
             * conditions={matcherFlag:"0",excludeStrArr:[],length:"",ignoreCase:true}
             */
            isPatternMustExcludeSomeStr: function(input, conditions) {
                //参数
                var matcherFlag = conditions.matcherFlag;
                var excludeStrArr = conditions.excludeStrArr;
                var length = conditions.length;
                var ignoreCase = conditions.ignoreCase;
                //拼正则
                var size = excludeStrArr.length;
                var regex = (size == 0) ? "^" : "^(?!.*(?:{0}))";
                var subPattern = "";
                for(var i = 0; i < size; i++) {
                    excludeStrArr[i] = Bee.StringUtils.escapeMetacharacterOfStr(excludeStrArr[i]);
                    subPattern += excludeStrArr[i];
                    if(i != size - 1) {
                        subPattern += "|";
                    }
                }
                regex = this.format(regex, [subPattern]);
                switch(matcherFlag) {
                    case '0':
                        regex += "\\d";
                        break;
                    case '1':
                        regex += "[a-zA-Z]";
                        break;
                    case '2':
                        regex += "[a-z]";
                        break;
                    case '3':
                        regex += "[A-Z]";
                        break;
                    case '4':
                        regex += "[!-/:-@\[-`{-~]";
                        break;
                    case '5':
                        regex += "[\u4E00-\u9FA5]";
                        break;
                    case '6':
                        regex += "[a-zA-Z0-9]";
                        break;
                    case '7':
                        regex += "[a-z0-9]";
                        break;
                    case '8':
                        regex += "[A-Z0-9]";
                        break;
                    case '9':
                        regex += "[!-~]";
                        break;
                    case '10':
                        regex += "[0-9\u4E00-\u9FA5]";
                        break;
                    case '11':
                        regex += "[a-z!-/:-@\[-`{-~]";
                        break;
                    case '12':
                        regex += "[A-Z!-/:-@\[-`{-~]";
                        break;
                    case '13':
                        regex += "[a-zA-Z!-/:-@\[-`{-~]";
                        break;
                    case '14':
                        regex += "[a-z\u4E00-\u9FA5]";
                        break;
                    case '15':
                        regex += "[A-Z\u4E00-\u9FA5]";
                        break;
                    case '16':
                        regex += "[a-zA-Z\u4E00-\u9FA5]";
                        break;
                    case '17':
                        regex += "[\u4E00-\u9FA5!-/:-@\[-`{-~]";
                        break;
                    case '18':
                        regex += "[\u4E00-\u9FA5!-~]";
                        break;
                    case '19':
                        regex += "[a-z\u4E00-\u9FA5!-/:-@\[-`{-~]";
                        break;
                    case '20':
                        regex += "[A-Z\u4E00-\u9FA5!-/:-@\[-`{-~]";
                        break;
                    case '100':
                        regex += "[\s\S]";
                        break;
                    default:
                        alert(matcherFlag + ":This type is not supported!");
                }
                regex += this.isNotBlank(length) ? "{" + length + "}" : "+";
                regex += "$";
                var pattern = new RegExp(regex, ignoreCase ? "i" : "");
                return pattern.test(input);
            },
            /**
             * @param {String} message
             * @param {Array} arr
             * 消息格式化
             */
            format: function(message, arr) {
                return message.replace(/{(\d+)}/g, function(matchStr, group1) {
                    return arr[group1];
                });
            },
            /**
             * 把连续出现多次的字母字符串进行压缩。如输入:aaabbbbcccccd  输出:3a4b5cd
             * @param {String} input
             * @param {Boolean} ignoreCase : true or false 
             */
            compressRepeatedStr: function(input, ignoreCase) {
                var pattern = new RegExp("([a-z])\\1+", ignoreCase ? "ig" : "g");
                return result = input.replace(pattern, function(matchStr, group1) {
                    return matchStr.length + group1;
                });
            },
            /**
             * 校验必须同时包含某些字符串
             * @param {String} input
             * @param {Object} conditions:里面有多个属性,如下:
             * 
             * @param {String} matcherFlag 匹配标识
             * 0:数字;1:字母;2:小写字母;3:大写字母;4:特殊字符,指英文状态下的标点符号及括号等;5:中文;
             * 6:数字和字母;7:数字和小写字母;8:数字和大写字母;9:数字、字母和特殊字符;10:数字和中文;
             * 11:小写字母和特殊字符;12:大写字母和特殊字符;13:字母和特殊字符;14:小写字母和中文;15:大写字母和中文;
             * 16:字母和中文;17:特殊字符、和中文;18:特殊字符、字母和中文;19:特殊字符、小写字母和中文;20:特殊字符、大写字母和中文;
             * 100:所有字符;
             * @param {Array} excludeStrArr 排除的字符串,数组格式
             * @param {String} length 长度,可为空。1,2表示长度1到2之间;10,表示10个以上字符;5表示长度为5
             * @param {Boolean} ignoreCase 是否忽略大小写
             * conditions={matcherFlag:"0",containStrArr:[],length:"",ignoreCase:true}
             * 
             */
            isPatternMustContainSomeStr: function(input, conditions) {
                //参数
                var matcherFlag = conditions.matcherFlag;
                var containStrArr = conditions.containStrArr;
                var length = conditions.length;
                var ignoreCase = conditions.ignoreCase;
                //创建正则
                var size = containStrArr.length;
                var regex = "^";
                var subPattern = "";
                for(var i = 0; i < size; i++) {
                    containStrArr[i] = Bee.StringUtils.escapeMetacharacterOfStr(containStrArr[i]);
                    subPattern += "(?=.*" + containStrArr[i] + ")";
                }
                regex += subPattern;
                switch(matcherFlag) {
                    case '0':
                        regex += "\\d";
                        break;
                    case '1':
                        regex += "[a-zA-Z]";
                        break;
                    case '2':
                        regex += "[a-z]";
                        break;
                    case '3':
                        regex += "[A-Z]";
                        break;
                    case '4':
                        regex += "[!-/:-@\[-`{-~]";
                        break;
                    case '5':
                        regex += "[\u4E00-\u9FA5]";
                        break;
                    case '6':
                        regex += "[a-zA-Z0-9]";
                        break;
                    case '7':
                        regex += "[a-z0-9]";
                        break;
                    case '8':
                        regex += "[A-Z0-9]";
                        break;
                    case '9':
                        regex += "[!-~]";
                        break;
                    case '10':
                        regex += "[0-9\u4E00-\u9FA5]";
                        break;
                    case '11':
                        regex += "[a-z!-/:-@\[-`{-~]";
                        break;
                    case '12':
                        regex += "[A-Z!-/:-@\[-`{-~]";
                        break;
                    case '13':
                        regex += "[a-zA-Z!-/:-@\[-`{-~]";
                        break;
                    case '14':
                        regex += "[a-z\u4E00-\u9FA5]";
                        break;
                    case '15':
                        regex += "[A-Z\u4E00-\u9FA5]";
                        break;
                    case '16':
                        regex += "[a-zA-Z\u4E00-\u9FA5]";
                        break;
                    case '17':
                        regex += "[\u4E00-\u9FA5!-/:-@\[-`{-~]";
                        break;
                    case '18':
                        regex += "[\u4E00-\u9FA5!-~]";
                        break;
                    case '19':
                        regex += "[a-z\u4E00-\u9FA5!-/:-@\[-`{-~]";
                        break;
                    case '20':
                        regex += "[A-Z\u4E00-\u9FA5!-/:-@\[-`{-~]";
                        break;
                    case '100':
                        regex += "[\s\S]";
                        break;
                    default:
                        alert(matcherFlag + ":This type is not supported!");
                }
                regex += this.isNotBlank(length) ? "{" + length + "}" : "+";
                regex += "$";
                var pattern = new RegExp(regex, ignoreCase ? "i" : "");
                return pattern.test(input);
            },
            //中文校验
            isChinese: function(input) {
                return /^[\u4E00-\u9FA5]+$/.test(input);
            },
            //去掉中文字符
            removeChinese: function(input) {
                return input.replace(/[\u4E00-\u9FA5]+/gm, "");
            },
            //转义元字符
            escapeMetacharacter: function(input) {
                var metacharacter = "^$()*+.[]|\\-?{}|";
                if(metacharacter.indexOf(input) >= 0) {
                    input = "\\" + input;
                }
                return input;
            },
            //转义字符串中的元字符
            escapeMetacharacterOfStr: function(input) {
                return input.replace(/[\^\$\(\)\*\+\.\[\]\|\\\-\?\{\}\|]/gm, "\\$&");
            }
        },
        /******************************字符串[string]类js***********************************/
 
 
        /******************************加密算法[encryption]类js***********************************/
        encryptionUtils : {
            urlEncode : function(str){
                if (str == null || str == "") return "";
                var newStr = "";
                function toCase(sStr) {
                    return sStr.toString(16).toUpperCase();
                }
                for (var i = 0,
                icode, len = str.length; i < len; i++) {
                    icode = str.charCodeAt(i);
                    if (icode < 0x10) newStr += "%0" + icode.toString(16).toUpperCase();
                    else if (icode < 0x80) {
                        if (icode == 0x20) newStr += "+";
                        else if ((icode >= 0x30 && icode <= 0x39) || (icode >= 0x41 && icode <= 0x5A) || (icode >= 0x61 && icode <= 0x7A)) newStr += str.charAt(i);
                        else newStr += "%" + toCase(icode);
                    } else if (icode < 0x800) {
                        newStr += "%" + toCase(0xC0 + (icode >> 6));
                        newStr += "%" + toCase(0x80 + icode % 0x40);
                    } else {
                        newStr += "%" + toCase(0xE0 + (icode >> 12));
                        newStr += "%" + toCase(0x80 + (icode >> 6) % 0x40);
                        newStr += "%" + toCase(0x80 + icode % 0x40);
                    }
                }
                return newStr;
            },
        },
    }
 
    // 返回可以暴露的内部成员
    return tools;
 
})(window, document, $);
 
// console.log(lyj);

posted @ 2018-07-02 11:26  tang1jun  阅读(335)  评论(0编辑  收藏  举报