﻿//扩展String类功能


//删除字符串二边空格
String.prototype.Trim = function() {
    return this.replace(/(^[\s]*)|([\s]*$)/g, "");
};
//删除字符串左边空格
String.prototype.LTrim = function() {
    return this.replace(/(^[\s]*)/g, "");
};
//删除字符串右边空格
String.prototype.RTrim = function() {
    return this.replace(/([\s]*$)/g, "");
};
//清空html内容
String.prototype.CleanHTML = function() {
    return this.replace(/<.*?>/g, "");
}

//左填充
String.prototype.PadLeft = function(totalWidth, paddingChar) {
    if (paddingChar != null) {
        return this.PadHelper(totalWidth, paddingChar, false);
    }
    else {
        return this.PadHelper(totalWidth, ' ', false);
    }
}
//右填充
String.prototype.PadRight = function(totalWidth, paddingChar) {
    if (paddingChar != null) {
        return this.PadHelper(totalWidth, paddingChar, true);
    }
    else {
        return this.PadHelper(totalWidth, ' ', true);
    }
}
String.prototype.PadHelper = function(totalWidth, paddingChar, isRightPadded) {
    if (this.length < totalWidth) {
        var paddingString = new String();
        for (i = 1; i <= (totalWidth - this.length); i++) {
            paddingString += paddingChar;
        } if (isRightPadded) {
            return (this + paddingString);
        } else {
            return (paddingString + this);
        }
    } else {
        return this;
    }
}

// strTarget： The substring you want to replace
// strSubString： The string you want to replace in.
String.prototype.replaceAll = function(strTarget, strSubString) {
    var strText = this;
    var intIndexOfMatch = strText.indexOf(strTarget);

    // Keep looping while an instance of the target string
    // still exists in the string.
    while (intIndexOfMatch != -1) {
        // Relace out the current instance.
        strText = strText.replace(strTarget, strSubString)

        // Get the index of any next matching substring.
        intIndexOfMatch = strText.indexOf(strTarget);
    }

    // Return the updated string with ALL the target strings
    // replaced out with the new substring.
    return (strText);
}


//得到左边的字符串
String.prototype.Left = function(len) {
    if (isNaN(len) || len == null) {
        len = this.length;
    }
    else {
        if (parseInt(len) < 0 || parseInt(len) > this.length) {
            len = this.length;
        }
    }
    return this.substr(0, len);
}
//得到右边的字符串
String.prototype.Right = function(len) {
    if (isNaN(len) || len == null) {
        len = this.length;
    }
    else {
        if (parseInt(len) < 0 || parseInt(len) > this.length) {
            len = this.length;
        }
    }
    return this.substring(this.length - len, this.length);
}
//取得指位置、宽度的字符串
String.prototype.Mid = function(start, len) {
    return this.substr(start, len);
}


//在字符串里查找另一字符串:位置从0开始
String.prototype.InStr = function(str) {
    if (str == null) {
        str = "";
    }
    return this.indexOf(str);
}
//在字符串里反向查找另一字符串:位置0开始
String.prototype.InStrRev = function(str) {
    if (str == null) {
        str = "";
    }
    return this.lastIndexOf(str);
}


//计算字符串打印长度
String.prototype.LengthW = function() {
    return this.replace(/[^\x00-\xff]/g, "**").length;
}


//是否是正确的日期
String.prototype.IsDate = function() {
    return this.isLongDate() || this.isShortDate();
}
//是否是正确的短日期
String.prototype.IsShortDate = function() {
    var r = this.replace(/(^\s*)|(\s*$)/g, "").match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
    if (r == null) {
        return false;
    }
    var d = new Date(r[1], r[3] - 1, r[4]);
    return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]);
}
//是否是正确的长日期
String.prototype.IsLongDate = function() {
    var r = this.replace(/(^\s*)|(\s*$)/g, "").match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/);
    if (r == null) {
        return false;
    }
    var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6], r[7]);
    return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6] && d.getSeconds() == r[7]);
}
//转换成日期
String.prototype.ToDate = function() {
    try {
        return new Date(this.replace(/-/g, "\/"));
    }
    catch (e) {
        return null;
    }
}


////是否是手机
//String.prototype.IsMobile = function() {
//    return /^0{0,1}13[0-9]{9}$/.test(this);
//}
//是否是有效的电话号码(中国)
String.prototype.IsPhoneCall = function() {
    return /(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/.test(this);
}


//是否是邮件
String.prototype.IsEmail = function() {
    return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(this);
}


//是否是邮编(中国)
String.prototype.IsZipCode = function() {
    return /^[\\d]{6}$/.test(this);
}


//是否是有汉字
String.prototype.ExistChinese = function() {
    //[\u4E00-\u9FA5]為漢字﹐[\uFE30-\uFFA0]為全角符號
    return /^[\x00-\xff]*$/.test(this);
}


//是否是有效链接
String.prototype.IsUrl = function() {
    return /^http[s]?:\/\/[\w-]+(\.[\w-]+)+([\w-\.\/?%&=]*)?$/.test(this);
}


//是否是有效的身份证(中国)
String.prototype.IsIDCard = function() {
    var iSum = 0;
    var info = "";
    var sId = this;

    var aCity = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外" };

    if (!/^\d{17}(\d|x)$/i.test(sId)) {
        return false;
    }
    sId = sId.replace(/x$/i, "a");
    //非法地区
    if (aCity[parseInt(sId.substr(0, 2))] == null) {
        return false;
    }

    var sBirthday = sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2));

    var d = new Date(sBirthday.replace(/-/g, "/"))

    //非法生日
    if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate())) {
        return false;
    }
    for (var i = 17; i >= 0; i--) {
        iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11);
    }

    if (iSum % 11 != 1) {
        return false;
    }

    return true;
}


//是否是正确的IP地址
String.prototype.IsIP = function() {

    var reSpaceCheck = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;

    if (reSpaceCheck.test(this)) {
        this.match(reSpaceCheck);
        if (RegExp.$1 <= 255 && RegExp.$1 >= 0
                 && RegExp.$2 <= 255 && RegExp.$2 >= 0
                 && RegExp.$3 <= 255 && RegExp.$3 >= 0
                 && RegExp.$4 <= 255 && RegExp.$4 >= 0) {
            return true;
        }
        else {
            return false;
        }
    }
    else {
        return false;
    }

}


//是否是合法的文件名/目录名
String.prototype.IsFileName = function() {
    return !/[\\\/\*\?\|:"<>]/g.test(this);
}


//是否是颜色(#FFFFFF形式)
String.prototype.IsColor = function() {
    var temp = this;
    if (temp == "") return true;
    if (temp.length != 7) return false;
    return (temp.search(/\#[a-fA-F0-9]{6}/) != -1);
}


//转换成全角
String.prototype.ToCase = function() {
    var tmp = "";
    for (var i = 0; i < this.length; i++) {
        if (this.charCodeAt(i) > 0 && this.charCodeAt(i) < 255) {
            tmp += String.fromCharCode(this.charCodeAt(i) + 65248);
        }
        else {
            tmp += String.fromCharCode(this.charCodeAt(i));
        }
    }
    return tmp
}

// 截取指定字符串str的左边n个字符
function Left(str, n, sign) {
    var r = /[^\x00-\xff]/g;

    if (str.replace(r, "mm").length > n) {
        var m = Math.floor(n / 2);
        for (var i = m; i < str.length; i++) {
            if (str.substr(0, i).replace(r, "mm").length >= n) {
                return str.substr(0, i) + sign;
            }
        }
    }
    return str;
}
function HTMLEnCode(input) {
    var converter = document.createElement("DIV");
    converter.innerText = input;
    var output = converter.innerHTML;
    converter = null;
    return output;
}
function HTMLDeCode(input) {
    var converter = document.createElement("DIV");
    converter.innerHTML = input;
    var output = converter.innerText;
    converter = null;
    return output;
}

function HTMLEncode(str) {
    var s = "";
    if (str.length == 0) return "";
    s = str.replace(/&/g, "&gt;");
    s = s.replace(/</g, "&lt;");
    s = s.replace(/>/g, "&gt;");
    s = s.replace(/    /g, "&nbsp;");
    s = s.replace(/\'/g, "&#39;");
    s = s.replace(/\"/g, "&quot;");
    s = s.replace(/\n/g, "<br>");
    return s;
}
function HTMLDecode(str) {
    var s = "";
    if (str.length == 0) return "";
    s = str.replace(/&gt;/g, "&");
    s = s.replace(/&lt;/g, "<");
    s = s.replace(/&gt;/g, ">");
    s = s.replace(/&nbsp;/g, "    ");
    s = s.replace(/&#39;/g, "\'");
    s = s.replace(/&quot;/g, "\"");
    s = s.replace(/<br>/g, "\n");
    return s;
}
