代码之家  ›  专栏  ›  技术社区  ›  SpliFF

需要String.fromCharCode的可靠替代品

  •  0
  • SpliFF  · 技术社区  · 17 年前
    function randomString( len ) {
      // A random string of length 'len' made up of alphanumerics.
      var out = '';
      for (var i=0; i<len; i++) {
          var random_key = 48 + Math.floor(Math.random()*42); //0-9,a-z
          out += String.fromCharCode( random_key );
      }
      window.alert(out);
      return out;
    }
    

    据我所知,这次调查的结果 String.fromCharCode 依赖于系统和/或浏览器。我看到的所有解决方法都是针对实际捕获键代码而不是生成它们的情况。有没有更可靠的方法来实现这一点(比如从ASCII码转换?)。

    1 回复  |  直到 17 年前
        1
  •  2
  •   Guffa    17 年前

    var random_key=48+ Math.floor(Math.random()*42); //0-9,a-z

    代码和注释不一致。可以创建的字符范围为0-9,:<,=>,?,@,还有A-Z。

    此范围内的字符代码位于ASCII字符集中,因此它们对于所有常用的西方字符集都是相同的。fromCharCode方法应该使用您为页面指定的字符集,但在您正在使用的范围内,这并不重要。

    将范围缩小7,如果不是数字,则加上39,得到0-9和a-z:

    function randomString(len) {
       // A random string of length 'len' made up of alphanumerics.
       var out = '';
       for (var i=0; i<len; i++) {
          var random_key = 48 + Math.floor(Math.random() * 36);
          if (random_key > 57) random_key += 39;
          out += String.fromCharCode(random_key);
       }
       window.alert(out);
       return out;
    }
    
        2
  •  1
  •   Kamil Kiełczewski    5 年前

    这里有一些局部的问题 - 另一种选择,让你得到 0-1 a-z

    let l= 30483235087530204251026473460499750369628008625670311705n.toString(36)
    
    console.log(l[26], l[0], l[25].toUpperCase(), l);
        3
  •  1
  •   quicVO    5 年前

    String.fromCharCode() TextDecoder() . 一个例子如下:

    //This gives back the String "Different" an unusual way
    new TextDecoder().decode(new Uint8Array([68, 105, 102, 102, 101, 114, 101, 110, 116]));
    
    //This gives back the String "Different" the usual way
    String.fromCharCode(68, 105, 102, 102, 101, 114, 101, 110, 116);
    

    可能还有更多的方法来实现这一点,但我注意到,没有一个答案真正回答了标题中的问题。所以干得好。