为了账号安全,请及时绑定邮箱和手机立即绑定

一种检查字符串是否包含来自特定子字符串的字符的方法

一种检查字符串是否包含来自特定子字符串的字符的方法

GCT1015 2023-03-18 16:39:02
我正在做一个编码训练营,我们的目标是设置一个密码生成器,用户可以选择哪种类型的字符(小写、大写、数字和特殊字符)和长度,并为他们提供一个随机的安全密码。除了作业的一个重要部分,即生成的密码必须包含用户选择的每个字符外,我能够使它的所有方面都起作用。它目前是随机抓取的,因此如果您选择所有 4 个条件,它们将全部出现并不总是保证。我如何验证这一点?const lowCaseArr = "abcdefghijklmnopqrstuvwxyz";const upCaseArr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";const numeralArr = "1234567890";const specialArr = "!@#$%^&*";function getLength() {    while (true) {        var userLength = parseInt(prompt("How many numbers, between 8 and 128, would you like to use? (Enter 0 to cancel)"));        if (userLength == 0) {            return 0;        } else if (userLength > 128 || userLength < 8) {            alert("You must enter a number between 8-128.");        } else if (userLength <= 128 && userLength >= 8) {            alert("Great! Your have selected a password with " + userLength + " characters.");            return userLength;        }    } }function randChar(passwordCharacters) {    return passwordCharacters.charAt(Math.floor(Math.random() * passwordCharacters.length));}function makePassword(userLength, passwordCharacters) {     var securePassword = "";    for (i = 0; i < userLength; i++) {            securePassword += randChar(passwordCharacters);    }    return securePassword;}function generatePassword() {    var userLength = getLength();    if (userLength == 0) {        return "User Cancelled Request";    }    var passwordCharacters = "";    var askLowerCase = confirm("Would you like to include lower case characters? (a, b, c)");    if (askLowerCase !== true) {        alert("Got it. No lower case characters will be included.");    } else {        alert("Great! Your password will include lower case characters!");        passwordCharacters += lowCaseArr;    }
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

与其在事后更改密码,不如通过确保密码满足所有约束从一开始就正确生成密码。


我已经使用了您的代码片段来生成一个独立的函数makeSecurePassword(),该函数接受多个参数:userLength, askLowerCase, askUpperCase, askNumerals, askSpecial。它返回请求的密码userLength,仅包含请求的字符类型。它使用你的randChar()辅助函数。


var securePassword = makeSecurePassword( 10, true, true, true, true );


console.log(securePassword);


// Return a random character from passwordCharacters:

function randChar(passwordCharacters) {

    return passwordCharacters.charAt(Math.floor(Math.random() * passwordCharacters.length));

}


function makeSecurePassword( userLength, askLowerCase, askUpperCase, askNumerals, askSpecial ) {

    const lowCaseArr = "abcdefghijklmnopqrstuvwxyz";

    const upCaseArr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    const numeralArr = "1234567890";

    const specialArr = "!@#$%^&*";


    var password = [];


    // Decide which chars to consider:

    charArray = [];

    if ( askLowerCase ) {

        charArray.push( lowCaseArr );

    }

    if ( askUpperCase ) {

        charArray.push( upCaseArr );

    }

    if ( askNumerals ) {

        charArray.push( numeralArr );

    }

    if ( askSpecial ) {

        charArray.push( specialArr );

    }

    

    let x = 0; // index into charArray

    for ( var i=0; i < userLength; i++ ) {

        var a = charArray[x]; // Which array of chars to look at


        // Insert at random spot:       

        password.splice( password.length, 1, randChar( a ) );


        // Pick next set of chars:

        if ( ++x >= charArray.length ) {

            x = 0; // Start with the first set of chars if we went past the end

        }

    }


    return password.join(''); // Create a string from the array of random chars

}


查看完整回答
反对 回复 2023-03-18
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信