﻿// Js验证 重构String

String.prototype.LTrim = function(){
/// <summary>去除左边的空格</summary>
    return this.replace(/(^ *)/g, "");
}

String.prototype.Mid = function(start,len){
/// <summary>字符串截取函数</summary>
/// <param name="start">开始索引</param>
/// <param name="len">长度</param>
    if(isNaN(start)&&start<0)
    {
        return "";
    }
    if(isNaN(len)&&len<0)
    {
        return "";
    }
    return this.substring(start,len);
}

String.prototype.Rtrim = function(){
/// <summary>去除右边的空格</summary>
    return this.replace(/( *$)/g, "");
}

String.prototype.Trim = function(){
/// <summary>去除前后空格</summary>
    return this.replace(/(^ *)|( *$)/g, "");
}

String.prototype.Left = function(len){
/// <summary>得到左边的字符串 </summary>
/// <param name="len">长度</param>
    if(isNaN(len) || len==null)
    {
        len = this.length;
    }
    else 
    {
        if(parseInt(len)<0||parseInt(len)>this.length)
        {
            len = this.length;
        }
    }
    return this.substring(0,len);
}


String.prototype.Right = function(len){
/// <summary>得到右边的字符串 </summary>
/// <param name="len">长度</param>
    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){
/// <summary>得到中间的字符串,注意从0开始</summary>
/// <param name="start">开始索引</param>
/// <param name="len">长度</param>
    if(isNaN(start)||start==null)
    {
        start = 0;
    }
    else 
    {
        if(parseInt(start)<0)
        {
            start = 0;
        }
    }
    if(isNaN(len)|| len == null)
    {
        len = this.length;
    }else{
        if(parseInt(len)< 0)
            len = this.length;
    }
    return this.substring(start,start + len);
}

String.prototype.InStr = function(str){
/// <summary>在字符串里查找另一字符串:位置从0开始</summary>
/// <param name="str">开始索引</param>
    if(str==null)
    {
        str = "";
    }
    return this.indexOf(str);
}

 String.prototype.InStrRev = function(str){
/// <summary>在字符串里反向查找另一字符串:位置0开始 </summary>
    if(str == null)
    {
        str = "";
    }
    return this.lastIndexOf(str);
}

String.prototype.LengthW = function(){
/// <summary>计算字符串打印长度 </summary>
    return this.replace(/[^\x00-\xff]/g,"**").length;
}

String.prototype.isIP = function(){
/// <summary>是否是正确的IP地址</summary>
    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.isDate = function(){
/// <summary>是否是正确的长日期 </summary>
    var r = str.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.isMobile = function(){
/// <summary>是否是手机</summary>
    return /^0{0,1}13[0-9]{9}$/.test(this);
}


String.prototype.isEmail = function(){
/// <summary>是否是邮件</summary>
    return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(this);
}

String.prototype.isZipCode = function(){
/// <summary>是否是邮编(中国)</summary>
    return /^[\\d]{6}$/.test(this);
}

String.prototype.existChinese = function(){
/// <summary>是否是有汉字</summary>
    //[\u4E00-\u9FA5]為漢字﹐[\uFE30-\uFFA0]為全角符號
    return /^[\x00-\xff]*$/.test(this);
}


String.prototype.isFileName = function(){
/// <summary>是否是合法的文件名/目录名 </summary>
    return !/[\\\/\*\?\|:"<>]/g.test(this);
}

 

String.prototype.isUrl = function(){
/// <summary>是否是有效链接</summary>
    var argvalue =this;
    if (argvalue.indexOf(" ") != -1)
        return false;
    //else if (argvalue.indexOf("http://") == -1)
       // return false;
    else if (argvalue == "http://")
        return false;
    else if (argvalue.indexOf("http://") > 0)
        return false;

    argvalue = argvalue.substring(7, argvalue.length);
    if (argvalue.indexOf(".") == -1)
        return false;
    else if (argvalue.indexOf(".") == 0)
        return false;
    else if (argvalue.charAt(argvalue.length - 1) == ".")
        return false;

    if (argvalue.indexOf("/") != -1) {
        argvalue = argvalue.substring(0, argvalue.indexOf("/"));
        if (argvalue.charAt(argvalue.length - 1) == ".")
            return false;
    }

    if (argvalue.indexOf(":") != -1) {
        if (argvalue.indexOf(":") == (argvalue.length - 1))
            return false;
        else if (argvalue.charAt(argvalue.indexOf(":") + 1) == ".")
            return false;
        argvalue = argvalue.substring(0, argvalue.indexOf(":"));
        if (argvalue.charAt(argvalue.length - 1) == ".")
            return false;
    }
    return true;
}

String.prototype.isIDCard = function(){
/// <summary>是否是有效的身份证(中国)</summary>
    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;
}

String.prototype.isPhoneCall = function(){
/// <summary>是否是有效的电话号码(中国)</summary>
    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.isUserID = function(len,maxLen){
/// <summary>验证是否是：只能是以字母开头，3-20位之间的任意字母与数字-_组合的字符串</summary>
/// <param name="len">最低长度</param>
/// <param name="maxLen">最大长度</param>
    if(len == null)
        len = 6;
    if(maxLen == null)
        maxLen = 20;
    return /^[a-zA-Z]+[\w-]{len,maxLen}$/.test(this);
}
String.prototype.isPassWord = function(len,maxLen){
/// <summary>是否是密码格式，只能是数字与字母的组合</summary>
/// <param name="len">最低长度</param>
/// <param name="maxLen">最大长度</param>
    if(len == null)
        len = 6;
    if(maxLen == null)
        maxLen = 20;
    return /^[\w]{len,maxLen}/.test(this);
}
String.prototype.isDisabled = function(){
/// <summary>是否有禁用的字符</summary>
    return /\+|\=|\&|\^|'/.test(this);
}
String.prototype.isEmpty = function(){
/// <summary>是否为空</summary>
    return this.Trim().length == 0;
}
String.prototype.isNumeric = function(flag){
/// <summary>是否是数字</summary>
/// <param name="flag">标识 +正数 -负数 i整数 +i正整数 -i负整数 f浮点数 +f正浮点数 -f负浮点数</param>
    //验证是否是数字 
    if(isNaN(this))
    {
        return false;
    }
    switch(flag)
    {
        case null://数字 
        case "": 
            return true;
        case "+"://正数 
            return/(^\+?|^\d?)\d*\.?\d+$/.test(this);
        case "-"://负数 
            return/^-\d*\.?\d+$/.test(this);
        case "i"://整数 
            return/(^-?|^\+?|\d)\d+$/.test(this);
        case "+i"://正整数 
            return/(^\d+$)|(^\+?\d+$)/.test(this);
        case "-i"://负整数 
            return/^[-]\d+$/.test(this);
        case "f"://浮点数 
            return/(^-?|^\+?|^\d?)\d*\.\d+$/.test(this);
        case "+f"://正浮点数 
            return/(^\+?|^\d?)\d*\.\d+$/.test(this);
        case "-f"://负浮点数 
            return/^[-]\d*\.\d$/.test(this);
        default://缺省 
            return true;
    }
}


String.prototype.toCase = function(){
/// <summary>转换成全角</summary>
    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 
}

String.prototype.toHtmlEncode = function(){
/// <summary>对字符串进行Html编码</summary>
    var str = this;
    str=str.replace("&","&");
    str=str.replace("<","<");
    str=str.replace(">",">");
    str=str.replace("'","&apos;");
    str=str.replace("\"","&quot;");
    return str;
}
String.prototype.toSize = function(){
/// <summary>对字符串进行转换成可读的文件大小</summary>
    var s = Number(this);
    var re = "";
    if(s > 1024 * 1024)
        re = Math.round(s /1024/1024) + "M";
    else if(s > 1024)
        re = Math.round(s /1024) + "KB";
    else
        re = s + "B";
    return re;
}
String.prototype.toMoneyDX = function(){
/// <summary>转换成金钱大小</summary>
    var num = this;
    if(!num.isNumeric("+"))return num;
    var str1 = "零壹贰叁肆伍陆柒捌玖"; //0-9所对应的汉字 
    var str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字 
    var str3 = ""; //从原num值中取出的值 
    var str4 = ""; //数字的字符串形式 
    var str5 = ""; //人民币大写金额形式 
    var i; //循环变量 
    var j; //num的值乘以100的字符串长度 
    var ch1 = ""; //数字的汉语读法 
    var ch2 = ""; //数字位的汉字读法 
    var nzero = 0; //用来计算连续的零值是几个 
    var temp; //从原num值中取出的值
    var _num = new Number(num) * 100;
    str4 = new String(Math.round(_num)); //将num乘100并转换成字符串形式
    j = str4.length; //找出最高位 
    if (j > str2.length) { return "溢出"; }
    str2 = str2.substr(str2.length - j,j); //取出对应位数的str2的值。如：200.55,j为5所以str2=佰拾元角分 
    //循环取出每一位需要转换的值 
    for (i = 0; i < j; i++)
    {   
        str3 = str4.substr(i, 1); //取出需转换的某一位的值 
        temp =new Number(str3); //转换为数字 
        if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15))
        {
            //当所取位数不为元、万、亿、万亿上的数字时 
            if (str3 == "0")
            {
                ch1 = "";
                ch2 = "";
                nzero = nzero + 1;
            }
            else
            {
                if (str3 != "0" && nzero != 0)
                {
                    ch1 = "零" + str1.substr(temp * 1, 1);
                    ch2 = str2.substr(i, 1);
                    nzero = 0;
                }
                else
                {
                    ch1 = str1.substr(temp * 1, 1);
                    ch2 = str2.substr(i, 1);
                    nzero = 0;
                }
            }
        }
        else
        {
            //该位是万亿，亿，万，元位等关键位 
            if (str3 != "0" && nzero != 0)
            {
                ch1 = "零" + str1.substr(temp * 1, 1);
                ch2 = str2.substr(i, 1);
                nzero = 0;
            }
            else
            {
                if (str3 != "0" && nzero == 0)
                {
                    ch1 = str1.substr(temp * 1, 1);
                    ch2 = str2.substr(i, 1);
                    nzero = 0;
                }
                else
                {
                    if (str3 == "0" && nzero >= 3)
                    {
                        ch1 = "";
                        ch2 = "";
                        nzero = nzero + 1;
                    }
                    else
                    {
                        if (j >= 11)
                        {
                            ch1 = "";
                            nzero = nzero + 1;
                        }
                        else
                        {
                            ch1 = "";
                            ch2 = str2.substr(i, 1);
                            nzero = nzero + 1;
                        }
                    }
                }
            }
        }
        if (i == (j - 11) || i == (j - 3))
        {
            //如果该位是亿位或元位，则必须写上 
            ch2 = str2.substr(i, 1);
        }
        str5 = str5 + ch1 + ch2;

        if (i == j - 1 && str3 == "0")
        {
            //最后一位（分）为0时，加上“整” 
            str5 = str5 + '整';
        }
    }
    if (num == 0)
    {
        str5 = "零元整";
    }
    return str5;
}