簡體   English   中英

如何在javascript中多次獲取隨機值?

[英]How to get random value multiple times in javascript?

我試圖在 JS 中多次從列表中獲取隨機值。 我從用戶那里得到了“長度”輸入的值,然后從 javascript 中的列表中多次得到那么多的字符......................

記者:

toUpper = function(x){ 
  return x.toUpperCase();
};
function gen() {
    var symbol = document.getElementById("symbolsCB");
    var number = document.getElementById("numbersCB");
    var upper = document.getElementById("uppersCB");
    var length = document.getElementById("numberOfChars");
    var op = document.getElementById("outputBox");
    var list = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",];
    if (symbol.checked == true){
        var symbols = ["?","!","@","#","$","%","^","&","*","(",")",",",".","+","=","[","]","{","}",";",":","<",">"];
        symbols.push.apply(list, symbols);
        let char = list[Math.floor(Math.random() * list.length)];
        op.innerHTML = char;
    }
    if (number.checked == true){
        var numbers = ["1","2","3","4","5","6","7","8","9","0",];
        numbers.push.apply(list, numbers);
        let char = list[Math.floor(Math.random() * list.length)];
        op.innerHTML = char;
    }
    if (upper.checked == true){
        var upperslower = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
        uppers = upperslower.map(toUpper);
        uppers.push.apply(list, uppers);
        let char = list[Math.floor(Math.random() * list.length)];
        op.innerHTML = char;
    }
}

HTML:

<div class="page">
  <title> Random Password Generator </title>
  <header>
    <h1> Random Password Generator </h1>
  </header>
  <br><br>
  <input type="checkbox" name="numbers" id="numbersCB" class="cb">
  <label for="numbers"> Inculde Numbers </label>
  <br><br>
  <input type="checkbox" name="uppers" id="uppersCB" class="cb">
  <label for="uppers"> Inculde Uppercase Letters </label>
  <br><br>
  <input type="checkbox" name="symbols" id="symbolsCB" class="cb">
  <label for="symbols"> Inculde Symbols ( e.g. @ # $ % ) </label>
  <br><br>
  <input type="text" id="numberOfChars" name="numberOfChars" placeholder="Length of password...">
  <br><br>
  <button onclick="gen()"> Generate Random Password </button>
  <br><br>
  <input type="text" id="outputBox" name="outputBoxName" disabled="disabled">
  <br>
</div>
  <script type = "text/javascript" src = "js.js"></script>

您的邏輯不是最優的:您想首先構建符號列表,然后根據需要提取盡可能多的字符。

function gen() {
    var symbol = document.getElementById("symbolsCB");
    var number = document.getElementById("numbersCB");
    var upper = document.getElementById("uppersCB");
    var length = document.getElementById("numberOfChars");
    var op = document.getElementById("outputBox");
    op.innerHTML = '';
    // Add letters. These are always present.
    var list = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",];
    if (upper.checked == true){
        list = list.concat(["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]);
    }
    // If the first letter of the password cannot be a number or a symbol,
    // add one character here and decrement length by 1.
    if (number.checked){
        list = list.concat(["1","2","3","4","5","6","7","8","9","0",]);
    }
    // If the first letter of the password cannot be a symbol,
    // add one character here and decrement length by 1.
    if (symbol.checked) {
        list = list.concat(["?","!","@","#","$","%","^","&","*","(",")",",",".","+","=","[","]","{","}",";",":","<",">"]);
    }
    // Now generate the password until the full length has been reached.
    // Duplicate symbols are allowed to increase security.
    while (op.innerHTML.length < length) {
        op.innerHTML += list[list.length * random()];
    }
}

我建議將問題分解成更小的部分 -

 const lowers = "abcdefghijklmnopqrstuvwxyz" const uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" const numbers = "0123456789" const symbols = ".@#$%^&*()_+" const rand = (n = 0) => Math.floor(Math.random() * n) const makeRand = (...seeds) => { const size = seeds,reduce((r. s) => r + s,length. 0) const generator = _ => { let r = rand(size) for (const s of seeds) if (r >= s.length) r -= s.length else return s[r] } return n => Array,from(Array(n). generator),join("") } const generator1 = makeRand(lowers, uppers) const generator2 = makeRand(lowers, uppers, numbers. symbols) console,log(generator1(10). generator1(20)) // LOTuXWBGOY yUjvsEycrXIZTCyYePfq console,log(generator2(10), generator2(20)) // jRE#f0Kji# AHjiysQElD+UkDQY08m1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM