字符串的截取 随机验证码

  // JavaScript中字符串的截取
        // 所谓字符串的截取,就是从原始字符串中,获取一部分内容,为新的字符串

        // 方法1  字符串.substr(参数1,参数2)
        // 参数1:指定截取的起始位置
        // 参数2:指定截取的字符长度(如果是负数,截取结果是空字符串)

        var str1 = 'abcdefg';

        // 语法形式1,从索引下标是0的位置开始,截取3个字符
        var res1 = str1.substr(0,3);

        // 语法形式2,如果只定义一个参数
        // 从指定的位置开始,截取至字符串结束
        var res2 = str1.substr(0);

        // 语法形式3,如果第一个参数是负数
        // 是从倒数第几个字符开始截取
        // -5,就是从倒数第五个字符开始截取
        // 2 ,就是截取2个字符
        var res3 = str1.substr(-5,2);


        // 总结:
        // 参数1,指定截取的起始位置
        //       正数,0 : 索引下标
        //       负数   : 倒数第几个字符
        // 参数2,指定截取字符的个数
        //       不写,默认截取至字符串的结束
        //       正数,0 : 截取字符的个数
        //       负数   : 截取结果是空字符串



        // 方法2: 字符串.substring(参数1,参数2);
        // 参数1:截取起始字符的索引(包含的)
        // 参数2:截取结束字符的索引(不包含的)
        // 包前不包后 , 管杀不管埋


        var str2 = 'abcdefg';

        // 语法形式1
        // 起始是索引为2的第三个字符 c 包含的
        // 结束是索引为5的第六个字符 g 不包含的
        var res4 = str2.substring(2,5);

        // 语法形式2
        // 定义一个参数
        // 特别注意,如果定义一个参数,会从指定的索引位置截取至字符串的最后一个字符
        // 并且,特别注意,是包括最后一个字符的
        var res5 = str2.substring(2);

        // 语法形式3
        // 参数1,是负数,从起始位置开始截取字符
        var res6 = str2.substring(-2);

        // 语法形式4
        // 参数2,是负数,结果是空字符串
        var res7 = str2.substring(-2,-2);

        // 总结 : substring()
        // 参数1:截取起始的索引下标
        //       如果只定义一个参数,截取至字符串的结束,包括字符串的最后一个字符
        //       参数1是负数,效果是从起始字符开始截取
        // 参数2:截取结束的索引下标
        //       定义了第二个参数,是截取结束的字符索引下标,但是不包含这个字符
        //       参数2是负数,结果是空字符串
 
  // 我们实际项目中,验证码的验证,我们使用的是第三方平台来做验证
        // 我们现在只是初步理解生成验证码的方法

        // 思路:
        // 从 字符串 中 随机截取或者获取一个字符 , 拼接生成 新的字符串
        // 新的字符串,就是随机的验证码

        // 原始字符串,是我们生成随机验证码的对象
        var str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

        // 如果要生成6位验证码,就是随机从这个字符串中,获取6个字符,拼接为一个新的字符串
        // 使用随机数配合循环来完成这个效果
        // 随机数的范围是 0 第一个索引 到 最后一个索引 str.length-1 
        // 如果允许出现重复的字符,那么只要限定循环的次数即可

        // 如果不允许出现重复的字符,可以使用indexOf()方法判断
        // 判断新字符串中,是否有,从原始字符串中获取的字符
        // 如果没有,可以拼接写入
        // 如果有,就不写入,并且执行i-- 在来循环一次

        // 允许出现重复的字符
        // var newStr = '';

        // for(var i = 1 ; i <= 6 ; i++){
        //     // 随机数的范围是 0 --- str.length-1
        //     var num = parseInt(Math.random()*(str.length-1+1-0) +0);
        //     // 通过随机数,作为索引下标,获取字符,拼接生成新的字符串
        //     newStr += str[num];
        // }

        // 不允许出现重复字符
        // var newStr = '';

        // var time = 0;

        // for(var i = 1 ; i <= 6 ; i++){
        //     time++;
        //     // 随机数的范围是 0 --- str.length-1
        //     var num = parseInt(Math.random()*(str.length-1+1-0) +0);
        //     // 新字符串中没有str[num]当前随机数获取的字符,执行写操作
        //     if(newStr.indexOf( str[num]) === -1){
        //         newStr += str[num];
        //     }else{
        //         // 生成重复字符,i--,再循环一次
        //         i--;
        //     }
        // }

        // console.log(newStr);
        // console.log(time);


        // 还可以使用while循环来实现
        // 实际不清楚循环次数
        // 当新字符串的长度不足6位,就需要继续循环,继续拼接新的字符
        // 当新字符串有6个字符,也就是长度是6,length属性是6时,终止循环
        
        // 存储新字符串
        var newStr = '';
        // 记录执行次数
        var time = 0;
        
        // 只要新字符串长度不是6 , 就循环
        while( newStr.length !== 6 ){
            // 随机数的范围是 0 --- str.length-1
            var num = parseInt(Math.random()*(str.length-1+1-0) +0);
            // 新字符串,没有当前获取的字符,就执行写入操作
            if(newStr.indexOf( str[num]) === -1){
                newStr += str[num];
            }
            // 循环一次,循环次数自增1
            time++;
        }