编码为 JavaScript 中的字母数字

Encode to alphanumeric in JavaScript

如果我有一个随机字符串并想将其编码为另一个仅包含字母数字字符的字符串,在 JavaScript / NodeJS 中最有效的方法是什么?

显然,在需要时必须能够将输出字符串转换回原始输入字符串。

谢谢!

要编码为字母数字字符串,您应该使用字母数字编码。一些流行的包括十六进制 (base16)、base32、base36、base58 和 base62。使用十六进制的替代方法是因为较大的字母表会导致较短的编码字符串。这里有一些信息:

  • 十六进制很受欢迎,因为它很常见。
  • Base32 和 Base36 可用于不区分大小写的编码。 Base32 更具人类可读性,因为它删除了一些容易被误读的字母。 Base32 用于游戏和许可证密钥。
  • Base58 和 Base62 可用于区分大小写的编码。 Base58 还被设计为通过删除一些容易被误读的字母来提高人类的可读性。 Flickr、比特币等使用 Base58。

在NodeJS中十六进制编码是natively supported,可以按如下方式进行:

// Encode
var hex = new Buffer(string).toString('hex');

// Decode
var string = new Buffer(hex, 'hex').toString();

重要的是要注意其中一些有不同的实现。例如,Flickr 和比特币使用不同的 Base58 实现。

为什么不直接将 2 个字符串存储在不同的变量中,这样就不需要转换回来了?

要提取所有字母数字,您可以像这样使用正则表达式函数:

var str='dssldjf348902.-/dsfkjl';
var patt=/[^\w\d]*/g;
var str2 = str.replace(patt,'');

str2 变为 dssldjf348902dsfkjl