工作点滴积累之Javascript方法篇

  1. 截取指定字节数的字符串

    /**
     * 截取指定字节的字符串
     * @param str 要截取的字符穿
     * @param len 要截取的长度,根据字节计算
     * @param suffix 截取前len个后,其余的字符的替换字符,一般用“…”
     * @returns {*}
     */
    function cutString(str,len,suffix){
       if(!str) return "";
       if(len <= 0) return "";
       if(!suffix) suffix = "";
       var templen = 0;
       for(var i = 0;i < str.length;i++){
          if(str.charCodeAt(i) > 255){
             templen += 2;
          }else{
             templen++
          }
          if(templen == len){
             return str.substring(0, i+1) + suffix;
          }else if(templen > len){
             return str.substring(0, i) + suffix;
          }
       }
       return str;
    }
    
  2. 判断是否微信

    /**
     * 判断微信浏览器
     * @returns {Boolean}
     */
    function isWeiXin() {
        var ua = window.navigator.userAgent.toLowerCase();
        if (ua.match(/MicroMessenger/i) == 'micromessenger') {
            return true;
        } else {
            return false;
        }
    }
    
  3. 获取时间格式的几个举例

    function getTimeFormat(time){
       var date = new Date(parseInt(time) * 1000);
       var month,day,hour,min;
       parseInt(date.getMonth())+1<10?month = '0'+(parseInt(date.getMonth())+1):month = parseInt(date.getMonth())+1;
       date.getDate()<10?day = '0'+date.getDate():day = date.getDate();
       date.getHours()<10?hour = '0'+date.getHours():hour = date.getHours();
       date.getMinutes()<10?min = '0'+date.getMinutes():min = date.getMinutes();
       return [month, day].join('-')+'  '+hour+':'+min
    }
    
    function getTimeFormatYMD(time) {
        var date = new Date(parseInt(time) * 1000);
        var year, month,day;
        year = date.getFullYear();
        parseInt(date.getMonth())+1<10?month = '0'+(parseInt(date.getMonth())+1):month = parseInt(date.getMonth())+1;
        date.getDate()<10?day = '0'+date.getDate():day = date.getDate();
        return [year, month, day].join('-')
    }
    
    function getTimeFormatAll(time) {
       var date = new Date(parseInt(time) * 1000);
       var year, month,day,hour,min, second;
       year = date.getFullYear();
       parseInt(date.getMonth())+1<10?month = '0'+(parseInt(date.getMonth())+1):month = parseInt(date.getMonth())+1;
       date.getDate()<10?day = '0'+date.getDate():day = date.getDate();
       date.getHours()<10?hour = '0'+date.getHours():hour = date.getHours();
       date.getMinutes()<10?min = '0'+date.getMinutes():min = date.getMinutes();
       date.getSeconds()<10?second = '0'+date.getSeconds():second = date.getSeconds();
    
       return [year, month, day].join('-')+'  '+hour+':'+min+':'+second
    }
    
  4. 获取字符串字节长度

    /**
     * 获取字符串字节长度
     * @param {String}
     * @returns {Boolean}
     */
    function checkLength(v){         
        var realLength = 0;
        var len = v.length;
        for (var i = 0; i < len; i++) {
           var charCode = v.charCodeAt(i);
           if (charCode >= 0 && charCode <= 128)
               realLength += 1;
           else
               realLength += 2;
       }
       return realLength;
    }
    
  5. 对象克隆、深拷贝

    /**
     * 对象克隆&深拷贝
     * @param obj
     * @returns {{}}
     */
    function cloneObj(obj) {
        var newO = {};
    
        if (obj instanceof Array) {
            newO = [];
        }
        for (var key in obj) {
            var val = obj[key];
            newO[key] = typeof val === 'object' ? arguments.callee(val) : val;
        }
        return newO;
    };
    

    克隆拷贝增强版

    /**
     * 对象克隆&深拷贝
     * @param obj
     * @returns {{}}
     */
    function clone(obj) {
        // Handle the 3 simple types, and null or undefined
        if (null == obj || "object" != typeof obj) return obj;
    
        // Handle Date
        if (obj instanceof Date) {
            var copy = new Date();
            copy.setTime(obj.getTime());
            return copy;
        }
    
        // Handle Array
        if (obj instanceof Array) {
            var copy = [];
            for (var i = 0, len = obj.length; i < len; ++i) {
                copy[i] = clone(obj[i]);
            }
            return copy;
        }
    
        // Handle Object
        if (obj instanceof Object) {
            var copy = {};
            for (attr in obj) {
                if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);
            }
            return copy;
        }
    
        throw new Error("Unable to copy obj! Its type isn't supported.");
    }
    

    测试用例:

    var origin = {
        a: "text",
        b: null,
        c: undefined,
        e: {
            f: [1, 2]
        }
    }
    
  6. 组织结构代码证验证

    验证规则:

    组织机构代码是每一个机关、社会团体、企事业单位在全国范围内唯一的、始终不变的法定代码
    标识。最新使用的组织机构代码在1997年颁布实施,由8位数字(或大写拉丁字母)本体代码和
    1位数字(或大写拉丁字母)校验码组成。本体代码采用系列(即分区段)顺序编码方法。
    校验码按下列公式计算: 
    8 
    C9 = 11 - MOD ( ∑Ci * Wi ,11) … (2) 
    i=1 
    其中:MOD —— 表示求余函数; 
    i —— 表示代码字符从左到右位置序号; 
    Ci —— 表示第i位置上的代码字符的值,采用附录A“代码字符集”所列字符; 
    C9 —— 表示校验码; 
    Wi —— 表示第i位置上的加权因子,其数值如下表: 
    i 1 2 3 4 5 6 7 8 
    Wi 3 7 9 10 5 8 4 2 
    当MOD函数值为1(即 C9 = 10)时,校验码用字母X表示。
    

    验证方法:

    checkOrgCodeValid: function(el){
        var txtval = el.value;
        var values=txtval.split("-");
        var ws = [3, 7, 9, 10, 5, 8, 4, 2];
        var str = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        var reg = /^([0-9A-Z]){8}$/;
        if (!reg.test(values[0])) {
            return false
        }
        var sum = 0;
        for (var i = 0; i < 8; i++) {
            sum += str.indexOf(values[0].charAt(i)) * ws[i];
        }
        var C9 = 11 - (sum % 11);
        var YC9 = values[1]+'';
        if (C9 == 11) {
            C9 = '0';
        } else if (C9 == 10) {
            C9 = 'X'  ;
        } else {
            C9 = C9+'';
        }
        return YC9 == C9;
    }
    
  7. 身份证号验证

    /**
     * 验证身份证号
     * @param el 号码输入input
     * @returns {boolean}
     */
    function checkCardNo(el){
        var txtval = el.value;
        var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
        return reg.test(txtval)
    }
    
  8. js正则为url添加http标识

    <!DOCTYPE html>
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script>
            var html = 'http://www.google.com';
            html += '\rwww.google.com';
            html += '\rcode.google.com';
            html += '\rhttp://code.google.com/hosting/search?q=label%3aPython';
            var regex = /(https?:\/\/)?(\w+\.?)+(\/[a-zA-Z0-9\?%=_\-\+\/]+)?/gi;
            alert('before replace:');
            alert(html);
            html = html.replace(regex, function(match, capture) {
                if (capture) {
                    return match
                } else {
                    return 'http://' + match;
                }
            });
            alert('after replace:');
            alert(html);
        </script>
    </head>
    
    <body>
    </body>
    
    </html>
    
  9. URL有效性校验方法

    /**
     * URL有效性校验
     * @param str_url
     * @returns {boolean}
     */
    function isURL(str_url) {// 验证url
        var strRegex = "^((https|http|ftp|rtsp|mms)?://)"
            + "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //           
        ftp的user@
                + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184
                + "|" // 允许IP和DOMAIN(域名)
                + "([0-9a-z_!~*'()-]+\.)*" // 域名- www.
                + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名
                + "[a-z]{2,6})" // first level domain- .com or .museum
                + "(:[0-9]{1,4})?" // 端口- :80
                + "((/?)|" // a slash isn't required if there is no file name
                + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
        var re = new RegExp(strRegex);
        return re.test(str_url);
    }
    
    // 建议的正则
    functionisURL(str){
        return!!str.match(/(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/g);
    }
    
  10. 自定义jsonp方法

    /**
     * 自定义封装jsonp方法
     * @param options
     */
    jsonp = function(options) {
        options = options || {};
        if (!options.url || !options.callback) {
            throw new Error("参数不合法");
        }
    
        //创建 script 标签并加入到页面中
        var callbackName = ('jsonp_' + Math.random()).replace(".", "");
        var oHead = document.getElementsByTagName('head')[0];
        options.data[options.callback] = callbackName;
        var params = formatParams(options.data);
        var oS = document.createElement('script');
        oHead.appendChild(oS);
    
        //创建jsonp回调函数
        window[callbackName] = function (json) {
            oHead.removeChild(oS);
            clearTimeout(oS.timer);
            window[callbackName] = null;
            options.success && options.success(json);
        };
    
        //发送请求
        oS.src = options.url + '?' + params;
    
        //超时处理
        if (options.time) {
            oS.timer = setTimeout(function () {
                window[callbackName] = null;
                oHead.removeChild(oS);
                options.fail && options.fail({ message: "超时" });
            }, time);
        }
    };
    /**
     * 格式化参数
     * @param data
     * @returns {string}
     */
    formatParams = function(data) {
        var arr = [];
        for (var name in data) {
            arr.push(encodeURIComponent(name) + '=' + encodeURIComponent(data[name]));
        }
        return arr.join('&');
    }
    
  11. cookie操作

    //写cookies
    setCookie = function(name,value,time) {
        var strsec = getsec(time);
        var exp = new Date();
        exp.setTime(exp.getTime() + strsec*1);
        document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
    }
    //cookie操作辅助函数
    getsec = function(str){
        var str1=str.substring(1,str.length)*1;
        var str2=str.substring(0,1);
        if (str2=="s"){
            return str1*1000;
        }else if (str2=="h"){
            return str1*60*60*1000;
        }else if (str2=="d"){
            return str1*24*60*60*1000;
        }
    }
    //读取cookies
    getCookie = function(name) {
        var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
        if(arr=document.cookie.match(reg))
            return (arr[2]);
        else
            return null;
    }
    
    //删除cookies
    delCookie = function(name) {
        var exp = new Date();
        exp.setTime(exp.getTime() - 1);
        var cval = getCookie(name);
        if(cval != null)
            document.cookie= name + "="+cval+";expires="+exp.toGMTString();
    }
    
  12. 生成随机字符串(可指定长度)

    /**
     * 生成随机字符串(可指定长度)
     * @param len
     * @returns {string}
     */
    randomString = function(len) {
        len = len || 8;
        var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';    /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
        var maxPos = $chars.length;
        var pwd = '';
        for (var i = 0; i < len; i++) {
            pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
        }
        return pwd;
    }
    

不断补充中…… 未完待续…… : )