其它基础 - 字符串处理

  • 作者:KK

  • 发表日期:2016.3.3


indexOf查找字符串

var str = 'AppleWatch';
var atIndex = str.indexOf('at'); // 6 表示在第6个字符后面

alert('"at"这个字符串出现在str变量字符串中的第' + atIndex + '个字母后面');
  • 找不到的时候会返回-1

    var str = 'Abcdbfg';
    var bbIndex = str.indexOf('bb'); // -1
    	
    //有的人会将条件写成 bbIndex < 0
    if(bbIndex == -1){
    	alert('没有找到字符串'); //所以可以根据是否大于-1来确定是否找到了
    }
    

    注意有的人会忘记找不到时会返回-1,于是代码会怎样这样判断:

    if(!str.indexOf('xxx')){
    	alert('没找到');
    }
    

    这样的判断条件是不对的,因为找不到返回-1后,判断条件就变成!-1,因为-1不是0,所以!-1的结果是false,于是判断不成功


  • 实际应用

    比如判断用户输入的文章标题有没有禁止发布的文字(以下函数代码注意要用function包住哦!)

    function test(){
    	var title = prompt('请输入文章标题');
    	if(!title){
    		alert('请输入文章标题');
    		return;
    	}
    
    	if(title.indexOf('枪支')){
    		alert('抱歉,禁止带有敏感词汇!');
    		return;
    	}
    
    	alert('文章标题已更新');
    }
    
    test();
    

indexOf方法执地的时候会从字符串的左边开始搜索指定的字符串,一旦遇到就会停止下来并返回那个位置的序号,其实还有个叫lastIndexOf的方法是可以倒过来搜索的,比较少用,这里暂不介绍,有兴趣可以自己上网查资料


字符串也有许多方法

,虽然变量类型是string,但它也是一种对象,它自带一些跟字符串相关的方法,这些方法都不会改变字符串本身,而是会返回相关的操作结果出来

下面继续将常用的方法介绍一下


substr裁剪字符串

  • 从指定的位置开始裁剪到最后

    var str = 'abcdefd';
    var result = str.substr(4);
    	
    alert(result); // efd 从第4个字母后面开始裁剪,第4个字母是d,从这里开始裁剪字符串得到的结果就是后面的 efd 三个字母结果
    alert(str); // abcdefd 原来的值不会改变
    

  • 从指定的位置开始裁剪 指定的长度

    var str = 'abcdefgrew';
    var result = str.substr(4, 2); // ef 从第4个字母后面开始裁剪2个字母,就是d后面的2个字母
    alert(result);
    

  • 从倒数第N个位置开始裁剪

    var str = '大家好我是中国人';
    var result = str.substr(-3);
    //用负数表示倒数第几个字符,这里-3就是倒数第3个,"中",由于没有第2个参数指定裁剪字符的个数,所以默认裁剪到最后,从"中"字开始哦
    alert(result); //"中国人"
    

    这个演示代码没有加入第2个参数来指定裁剪长度,你自己试试加入长度参数看看是否得到了你预期的值?不理解请留言


trim去除空格

有时候用户的输入会不小心多写一个空格,我们的代码经常要帮他去除一下再做处理,这样可以提高体验效果

使用trim方法来实现去除左右两边空格,例子

var name = ' 小明 ';
alert('我的名字叫' + name + '哦');
alert('我的名字叫' + name.trim() + '哦');

上面提示第1句的时候会发现"小明"这个词的左边会与"叫"字有一个空格距离,而右边也与"哦"字有一个空格距离

而第2句执行了trim方法返回的字符串就没有了空格,所以整个句子中间是没有空格的

trim方法并不兼容旧版IE浏览器,但一般可以无视,现在用旧版IE的人越来越少了;并且trim也是不会改变字符串本身,只是返回一个去除了空格之后的结果出来

  • 实际应用

    比如要用户注册时输入用户名,但他输入了一堆空格,这时候一般能理解为没输入,但是不去除空格,字符串就会有长度,满足条件判断了,先看看代码

    var name = '   '; //假如这是输入后的名字
    if(name){
    	alert('trim之前:输入完毕');
    }
    
    if(name.trim()){
    	alert('trim之后:输入完毕');
    }else{
    	alert('trim之后:您输入的姓名为空!');
    }
    

还有ltrim方法只会去除左边的空格,rtrim方法会去除右边的空格,请自己试一试


xxCase大小写转换

  • 转换成大写字母

    用toUpperCase方法

    var str = 'ok',
    	str2 = str.toUpperCase();
    alert(str2); //提示大写的 OK
    

    来来来再来alert('Apple'.toUpperCase());

    如果字符串中还有数字或符号的话,这些是不会被转换的,只转换字母部分:alert('One23Four'.toUpperCase())就是"ONE23FOUR"

  • 转换成小写字母

    toLowerCase方法,和toUpperCase方法一样,只是作用相反,转换成小写字母而已

    alert('OK'.toLowerCase()); //ok
    alert('AppleWatch'.toLowerCase()); //applewatch
    alert('AndRoid_Web2b9b'.toLowerCase()); //android_web2b9b