Javascript 密码生成器删除了 2 个字符

Javascript Password Generator removing 2 characters

这是我第一次在 Whosebug 上发帖,所以如果我做错了什么,请指正 :D

所以我在 JavaScript 中有一个密码生成器,它可以根据你想要的长度、字符等生成一个随机密码。

唯一的问题是它从生成的密码末尾删除了 2 个字符。 例如,您生成了一个 16 个字符的密码,但它会输出一个 14 个字符的密码。

JavaScript代码:

var ascii_lower = "abcdefghijklmnopqrstuvwxyz";
var ascii_upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var digits = "0123456789";
var punctuation = "!#$%&()*+,-./:;<=>?@[\]^_`{|}~";
var qu = '"';
var ap = "'";
var blank = "";
var blank1 = "";

function shuffle(e) {
    var t = e.slice();
    var n = t.length;
    var r, i;
    while (n-- > 0) {
        r = Math.floor(Math.random() * (n + 1));
        if (n != r) {
            i = t[n];
            t[n] = t[r];
            t[r] = i
        }
    }
    return t
}
function genpw() {
    var e = parseInt(document.pw_form.pw_len.value, 10);
    var t = new Array(blank, blank1);
    var n = new Array;
    var r = "";
    var i;
    if (document.pw_form.low.checked) {
        t.push(ascii_lower)
    }
    if (document.pw_form.high.checked) {
        t.push(ascii_upper)
    }
    if (document.pw_form.num.checked) {
        t.push(digits)
    }
    if (document.pw_form.punc.checked) {
        t.push(punctuation)
    }
    if (document.pw_form.qu.checked) {
        t.push(qu)
    }
    if (document.pw_form.ap.checked) {
        t.push(ap)
    }
    if (isNaN(e)) {
        e = 12
    }
    document.pw_form.pw_len.value = e;
    for (var s = 0; s < t.length; s++) {
        i = Math.floor(Math.random() * t[s].length);
        n.push(t[s].slice(i, i + 1));
        r = r + t[s];
        e--
    }
    while (e--) {
        i = Math.floor(Math.random() * r.length);
        n.push(r.slice(i, i + 1))
    }
    document.pw_form.pw_field.value = shuffle(n).join("");
    return true
}

HTML代码:

<form class="form-horizontal" name="pw_form" method="POST">
    <fieldset>
        <div class="form-group">
        <label for="pw_field" class="col-lg-2 control-label">Password:</label>
            <div class="col-lg-10">
                <input type="text" name="pw_field" id="pw_field" class="form-control" placeholder="Password (Output)" readonly="readonly">
            </div>
            <label for="pw_len" class="col-lg-2 control-label">Length:</label>
            <div class="col-lg-10">
                <input type="text" name="pw_len" id="pw_len" class="form-control" value="10" size="4">
                <tr><td><input checked="checked" type="checkbox" name="low">Lower Case</input></td></tr><br>
                <tr><td><input checked="checked" type="checkbox" name="high">Upper Case</input></td></tr><br>
                <tr><td><input checked="checked" type="checkbox" name="num">Numbers</input></td></tr><br>
                <tr><td><input type="checkbox" name="punc">Punctuation</input></td></tr><br>
                <tr><td><input type="checkbox" name="qu">Quotation Marks</input></td></tr><br>
                <tr><td><input type="checkbox" name="ap">Apostrophe</input></td></tr><br>
            </div>
        </div>
        <div class="form-group">
            <div class="col-lg-12">
                <input type="button" class="btn btn-block btn-success" value="Generate" onClick="genpw()">
            </div>
        </div>
    </fieldset>
</form>

非常感谢。

您不会丢失 2 个字符。前2个字符实际上是空字符串。

改变这个:

var t = new Array(blank, blank1);

为此:

var t = new Array;