-8

私はこれを C# で行うことができましたが、Javascript に変換することはできません。この投稿「Generate random password string with requirements in javascript」を見つけましたが、これを自分の要件に合わせてカスタマイズすることはできません。

パスワードは、長さが 8 文字以上、最大 13 文字である必要があり、次の文字列コレクションのそれぞれから少なくとも 1 文字を含める必要があります。

string specialCharacters = "~!@#$%^&*()_+=-|\\}]{[\"':;?/>.<,";
string numbers = "0123456789";
string smallLetters = "abcdefghijklmnopqrstuvwxyz";
string capitalLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

助けていただけますか?どうもありがとう!

編集:

C# での私のコードは次のとおりです。申し訳ありませんが、少し長くなります:

private string CreateRandomPassword(int passwordLength)
        {
            string specialCharacters = "~!@#$%^&*()_+=-|\\}]{[\"':;?/>.<,";
            string numbers = "0123456789";
            string smallLetters = "abcdefghijklmnopqrstuvwxyz";
            string capitalLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            string allowedChars = "";

            char[] chars = new char[passwordLength];
            string password = String.Empty;
            Random rd = new Random();

            int ctr = 0;
            int prop = 4;

            if(!_password.ContainsSpecialCharacters && !_password.ContainsNumbers && !_password.ContainsSmallLetters && !_password.ContainsCapitalLetters)
                return String.Empty;

            string sc = "";
            string num = "";
            string sl = "";
            string cl = "";

            if(_password.ContainsSpecialCharacters)
            {
                // Get a special character randomly
                rd = new Random();
                sc = specialCharacters[rd.Next(0, specialCharacters.Length)].ToString();
                allowedChars += specialCharacters;
            }
            else
            {
                prop--;
            }

            if(_password.ContainsNumbers)
            {
                // Get a random number randomly
                rd = new Random();
                num = numbers[rd.Next(0, numbers.Length)].ToString();
                allowedChars += numbers;
            }
            else
            {
                prop--;
            }

            if(_password.ContainsSmallLetters)
            {
                // Get a small letter randomly
                rd = new Random();
                sl = smallLetters[rd.Next(0, smallLetters.Length)].ToString();
                allowedChars += smallLetters;
            }
            else
            {
                prop--;
            }

            if(_password.ContainsCapitalLetters)
            {
                // Get a capital letter randomly
                rd = new Random();
                cl = capitalLetters[rd.Next(0, capitalLetters.Length)].ToString();
                allowedChars += capitalLetters;

            }
            else
            {
                prop--;
            }

            for (; ctr < passwordLength - prop; ctr++)
                password += allowedChars[rd.Next(0, allowedChars.Length)];


            return password + sc + num + sl + cl;
        }
4

3 に答える 3

0

これが私が思いついたものです。

JavaScript コンソールで実行するだけです。

(function() {
    var passwd, classTypes, classCount, len, chars, classIndex, charIndex;
    do {
        passwd = "";
        classTypes = [];
        classCount = 0;
        len = Math.round(Math.random() * 5 + 8);
        chars = ["~!@#$%^&*()_+=-|\\}]{[\"':;?/>.<,", "0123456789",
            "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"];
        while (passwd.length < len) {
            classIndex = Math.round(Math.random() * 3);
            classTypes[classIndex] = true;
            charIndex = Math.round(Math.random()
                * (chars[classIndex].length - 1));
            passwd += chars[classIndex].charAt(charIndex);
        }
        console.log(JSON.stringify(classTypes));
        classCount = classTypes.filter(function(value, index, object) {
            return value === true;
        }).length;
        console.log("classCount = " + classCount);
        console.log("passwd.length = " + passwd.length);
    } while (classCount < 4);
    console.log("generated pasword is \n" + passwd + "\n");
    console.log("but see http://xkcd.com/936/ for a better approach to paswords");
})();
于 2013-05-16T14:34:14.897 に答える
-1

試す

var specialCharacters = "~!@#$%^&*()_+=-|\\}]{[\"':;?/>.<,";
var numbers = "0123456789";
var smallLetters = "abcdefghijklmnopqrstuvwxyz";
var capitalLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

var srcs = [specialCharacters, numbers, smallLetters, capitalLetters];

function getRandomChar(string){
    var pos = Math.floor(Math.random() * string.length);
    return string.charAt(pos);
}

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/array/shuffle [v1.0]
function shuffle(o){ //v1.0
    for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
}
function generate(){
    var len = 8 + Math.floor(Math.random() * 5);

    var array = [];
    array.push(getRandomChar(specialCharacters));
    array.push(getRandomChar(numbers));
    array.push(getRandomChar(smallLetters));
    array.push(getRandomChar(capitalLetters));

    for(var i = 4; i < len; i++){
        var pos = Math.floor(Math.random() * srcs.length);
        array.push(getRandomChar(srcs[pos]));
    }
    return shuffle(array).join('')
}

for(var i = 0; i < 10; i++){
    console.log(generate())
}

デモ:フィドル

于 2013-05-16T12:51:47.577 に答える
-1

いずれかの文字列の文字が含まれているかどうかを確認するには、Javascript 正規表現を使用できます。リンクに従って、パスワード候補をそれらの文字に一致させるだけです。4 試合に挑戦します。length文字列の長さは、そのプロパティで確認できます。

于 2013-05-16T12:40:45.263 に答える