测试所有组合a-z,A-Z,0-9

时间:2014-10-09 18:09:34

标签: javascript for-loop combinations alphabet

我需要检查所有组合a-z,字符串长度为2。 因此,示例输出将是:

AA AB AC 广告 AE 等

我一直试图使用for循环,但没有成功。这就是我得到的:

var length = 2;
var password = [];
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

for(var l = 0; l < length; l++)
{
    for(var c = 0; c < 62; c++)
    {
        password[c] = possible.charAt(c);
        document.getElementById("code").innerHTML = password;
    }
}

4 个答案:

答案 0 :(得分:3)

t查看:http://jsfiddle.net/n0m4wvpq/

var passwords = function(chars, length){
    var index=[];
    chars = chars.split("");

    (function loop(base, i){
        for(var k=0; k< chars.length; k++) {
            if(i>1) loop(base+chars[k], i-1);
            else index.push(base+chars[k]);
        }
    })("", length);

    return index;
}

var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var length = 2;
passwords(possible, length);

有趣的事实:

此功能可用于生成Jorge Louis Borges "Library of Babel"

var libraryOfBabel = passwords("abcdefghijklmnopqrstuvwxyz ,.", 1312000);

PS:不要试试。 :)

答案 1 :(得分:0)

这对你有用吗?

var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for(var x of possible){
    for(var y of possible){
        console.log(x+y);
    }
}

答案 2 :(得分:0)

http://jsfiddle.net/y6qnsem4/

var length = 2;
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split('');
console.log(combine(length));

function combine(length, level, previous)
{
  var level = level || 1;
  var previous = previous || possible;
  var ret = [];

  previous.map(function(el) {
     possible.map(function(letter) {
        ret.push(el + letter);
     });
  });

  if (level < length - 1) ret = combine(length, level + 1, ret);

  return ret;
}

它返回组合数组,但是将它加入字符串并不困难,就像这个alert([1,2,3].join(','))一样。它适用于任何长度(当然,因为数组中的元素数量将等于possible.length ^ length,因此需要花费越来越多的时间。对于possible.length = 62length = 2,有3844种组合。对于length = 4,您将使用14776336组合“杀死/挂起”您的浏览器标签页。)

答案 3 :(得分:0)

也许是这样的:

var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(''),
    length = 2,
    i = 0,
    j = 0,
    step,
    comb;

for (i; i < possible.length; i++) {
    step = possible[i];
    console.log("==============" + step + "==============");
    for (j; j < possible.length; j++) {
        comb  = step + '' + possible.slice(j, j + (length - 1)).join('');
        console.log(comb);
    }
    j = 0;
}