自制 js 的 trim、right、left、instrRev、instr、mid 函数

发布时间 2023-04-07 12:33:00作者: jessezappy

//用惯了 VB 系列语法的 instr 和 mid 函数,在 js 里面处理字符串总是感觉束手束脚

//跟 Basic 语法比起来,其他语言的字符串处理函数的确非常不方便!!!因此,必须自己写个仿 Basic 语法的 javascript 的常用字符串处理函数库来用!!!

// 以下是经过多次修正,便于 js 处理字符串的函数

function trim(s){return s.replace(/(^\s*)|(\s*$)/g,"");} //清除字符串 s 前后英文空格
 
function revright(s,l){ //从 s 中从左侧取去除 l 长度右侧字符串的字符串
    var sl=len(s);
    return mid(s,1,sl-l);
}
 
function right(s,l){ //从 s 中从右侧取 l 长度的字符串
    var sl=len(s);
    return mid(s,sl-l+1,l);
}
function left(s,l){ //从 s 中从左侧取 l 长度的字符串
    return mid(s,1,l);
}
 
function instr(str,s){ //在 str 中查找字符串 s 第一次出现的位置,从左侧起计,起点为 1
    var dotn=str.indexOf(s);
    if(dotn<0){return 0;}else{return (dotn*1+1);}
}
 
function instrRev(str,s){ //在 str 中从右侧起查找字符串 s 第一次出现的位置,位置从左侧起计,起点为 1
    var dotn=str.lastIndexOf(s);
    if(dotn<0){return 0;}else{return (dotn*1+1);}
}
function len(s){ //返回字符串 s 的长度,数字则以十进制长度计
    if(isUndefined(s)){return 0;}//参数不足
    if(isNaN(s)){//非数字isNaN
        var sln=s.length;
    }else{
        //数值转字符
        var str=s.toString(10);
        var sln=str.length;
    }
    return sln;
}
function mid(str,s,l){  //从字符串 str 中从 s 位置起取 l 长度的字符串,起点为 1,忽略参数 l 则取自 s 位置起的后面全部字符串
    var outstr='';
    if(isUndefined(s)){return '';}//参数不足
    if(isUndefined(str)){return '';}//参数不足
    var sln=str.length;
    if(isNaN(s)){return '';}//参数非法
    //console.log(isNaN(s));
    s=s*1;
    if(isUndefined(l)){ //非数字isNaN        
        if(s>sln ){ //起点大于长度
            return '';
        }else{
            if((s-1)>sln ){//
                return '';
            }else{
                for(var i=s;i<sln+1;i++){ //没有长度信息,取到完
                    outstr+=str.charAt(i-1);//charAt从0计字符串,故要减一
                }        
                return outstr;
            }
        }    
    }else{
        if(isNaN(l)){ //非数字
            if(s>sln ){ //起点大于长度
                return '';
            }else{
                if((s-1)>sln ){//空console.log(sln);
                    return '';
                }else{
                    for(var i=s;i<sln+1;i++){ //没有长度信息,取到完
                        outstr+=str.charAt(i-1);//charAt从0计字符串,故要减一
                    }        
                    return outstr;
                }
            }
        }else{
            l=l*1;
            if(s>sln ){ //起点大于长度
                return '';
            }else{
                if((s+l-1)>sln ){//起点加长度减1大于长度,只取剩余字符,取到完
                    for(var i=s;i<sln+1;i++){
                        outstr+=str.charAt(i-1);//charAt从0计字符串,故要减一
                    }        
                    return outstr;
                }else{
                    for(var i=s;i<(s+l);i++){ //正常取法console.log(sln);
                        outstr+=str.charAt(i-1);//charAt从0计字符串,故要减一
                    }        
                    return outstr;
                }
            }
        }
    }
}
 
function isUndefined(value){   
    //获得undefined,保证它没有被重新赋值   
    var undefined = void(0);
    return value === undefined; 
}