Sprawdzenie, czy znaki zawierają się w haśle

0

Chciałem stworzyć prosty generator hasła.
Pod spodem są checkboxy, które mają sprawdzać, czy hasło zawiera duże i małe litery, cyfry i znaki specjalne.
Zacząłem pisać kod - dość paskudnie wyglądający, wybaczcie :p - ale nie mam pojęcia, jak stworzyć warunek, czy hasło zawiera wyżej wspomniane ani jak zrobić, żeby przy spełnieniu warunku dany checkbox automatycznie się ,,zaznaczył".
Mój mózg złapał error zaraz po zdecydowaniu, że zapewne za pomocą pętli sprawdzającej tablice i ifa

Na chwilę obecną już napisany fragment kodu wygląda tak:

<script>
            function draw(number, smallLetter, bigLetter, specialChar)
            {
                
                const myNumber = number[Math.round(Math.random()*number.length-1)];
                const mySmallLetter = smallLetter[Math.round(Math.random()*smallLetter.length-1)];
                const mySmallLetter2 = smallLetter[Math.round(Math.random()*smallLetter.length-1)];
                const mySmallLetter3 = smallLetter[Math.round(Math.random()*smallLetter.length-1)];
                const myBigLetter = bigLetter[Math.round(Math.random()*bigLetter.length-1)];
                const myBigLetter2 = bigLetter[Math.round(Math.random()*bigLetter.length-1)];
                const mySpecialChar = specialChar[Math.round(Math.random()*specialChar.length-1)];
                const mySpecialChar2 = specialChar[Math.round(Math.random()*specialChar.length-1)];

                const myPassword = mySmallLetter + mySpecialChar + myNumber + mySmallLetter2 + mySpecialChar2 + myBigLetter + myBigLetter2 + mySmallLetter3;

                return myPassword;
            }

            numbers = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"];
                smallLetters = ["q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "a", "s", "d", "f", "g", "h", "j", "k", "l", "z", "x", "c", "v", "b", "n", "m"];
                bigLetters = ["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "A","S", "D", "F", "G", "H", "J","K", "L", "Z", "X", "C", "V", "B", "N", "M"];
                specialChars = ["!", "@", "#", "$", "%", "^", "&", "*", "-", "_", "+", "=", "~", "{", "}", "[", "]", ":", ";", ".", "?"];

            document.getElementById('password').value = draw(numbers, smallLetters, bigLetters, specialChars);
            </script>
1
const myNumber = number[Math.round(Math.random()*number.length-1)];

random() zwraca wartość <0,1), więc raczej

const myNumber = number[ Math.floor( Math.random() * number.length ) ];

ponieważ inaczej zerowy i ostatni element tablicy nie są losowane z takim samym prawdopodobieństwem jak pozostałe.

0

Dobra, jestem kretynem - skopiowałem niecały kod i się dziwię...
Wrzucam pod spodem - ogólnie stworzyłem 4 checkboxy, które chciałbym zaznaczyć automatycznie, kiedy dany warunek zostanie spełniony (czyli jeśli wygenerowane hasło będzie zawierać kolejno: wielkie litery, małe litery, cyfry i znaki specjalne).
Myślałem, żeby np. stworzyć kolejną funkcję, do której przesłałbym te same tablice i za pomocą pętli sprawdzić, czy któryś element z tablicy zawiera się w wygenerowanym haśle - tylko niestety na tym moja kreatywność się kończy...

<body>
<form method="POST" action="/register">
    <label for="password">Twoje Hasło:</label></br>
    <input type="text" name="my_password" id="password" minlength="8" size="10"/></br>
</br>
<label for="bigLetter">Zawiera wielkie litery</label>
    <input type="checkbox" id="bigLetter" disabled/></form>
<label for="smallLetter">Zawiera małe litery</label>
    <input type="checkbox" id="smallLetter" disabled/></br>
<label for="number">Zawiera cyfry</label>
    <input type="checkbox" id="number" disabled/></br>
<label for="specialChar">Zawiera znaki specjalne</label>
    <input type="checkbox" id="specialChar" disabled/>
</form>
        <script>
            function draw(number, smallLetter, bigLetter, specialChar)
            {
                
                const myNumber = number[Math.round(Math.random()*number.length-1)];
                const mySmallLetter = smallLetter[Math.round(Math.random()*smallLetter.length-1)];
                const mySmallLetter2 = smallLetter[Math.round(Math.random()*smallLetter.length-1)];
                const mySmallLetter3 = smallLetter[Math.round(Math.random()*smallLetter.length-1)];
                const myBigLetter = bigLetter[Math.round(Math.random()*bigLetter.length-1)];
                const myBigLetter2 = bigLetter[Math.round(Math.random()*bigLetter.length-1)];
                const mySpecialChar = specialChar[Math.round(Math.random()*specialChar.length-1)];
                const mySpecialChar2 = specialChar[Math.round(Math.random()*specialChar.length-1)];

                const myPassword = mySmallLetter + mySpecialChar + myNumber + mySmallLetter2 + mySpecialChar2 + myBigLetter + myBigLetter2 + mySmallLetter3;

                return myPassword;
            }

            numbers = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"];
                smallLetters = ["q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "a", "s", "d", "f", "g", "h", "j", "k", "l", "z", "x", "c", "v", "b", "n", "m"];
                bigLetters = ["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "A","S", "D", "F", "G", "H", "J","K", "L", "Z", "X", "C", "V", "B", "N", "M"];
                specialChars = ["!", "@", "#", "$", "%", "^", "&", "*", "-", "_", "+", "=", "~", "{", "}", "[", "]", ":", ";", ".", "?"];
            console.log(draw(numbers, smallLetters, bigLetters, specialChars));

            document.getElementById('password').value = draw(numbers, smallLetters, bigLetters, specialChars);
           
            function check(number, smallLetter, bigLetter, specialChar)
            {
                const checkPassword = draw(numbers, smallLetters, bigLetters, specialChars);
                    /*if (checkPassword.match)
                    {
                        console.log("mlem");
                    }*/
                
               return checkPassword;
            }
                check(numbers, smallLetters, bigLetters, specialChars);
            </script>
2

@TotalNewbie: Poczytaj o regexie

0

Wielkie dzięki za pomoc, działa :D.
Chciałbym jeszcze tylko spytać, jak podłączyć ten kod pod button, bo mimo czytania raz po raz działu dalej nie potrafię tego zrobić (próbowałem tak jak poniżej):

<body>
<form method="POST" action="/register">
    <label for="password">Twoje Hasło:</label></br>
    <input type="text" name="my_password" id="password" minlength="8" size="10"/></br>
</br>
<label for="bigLetter">Zawiera wielkie litery</label>
    <input type="checkbox" id="bigLetter" disabled/></form>
<label for="smallLetter">Zawiera małe litery</label>
    <input type="checkbox" id="smallLetter" disabled/></br>
<label for="number">Zawiera cyfry</label>
    <input type="checkbox" id="number" disabled/></br>
<label for="specialChar">Zawiera znaki specjalne</label>
    <input type="checkbox" id="specialChar" disabled/>
</form></br>
<button onclick="draw(number, smallLetter, bigLetter, specialChar)">Generate</button>

        <script>
            function draw(number, smallLetter, bigLetter, specialChar)
            {
                const myNumber = number[Math.round(Math.random()*number.length)];
                const mySmallLetter = smallLetter[Math.round(Math.random()*smallLetter.length)];
                const mySmallLetter2 = smallLetter[Math.round(Math.random()*smallLetter.length)];
                const mySmallLetter3 = smallLetter[Math.round(Math.random()*smallLetter.length)];
                const myBigLetter = bigLetter[Math.round(Math.random()*bigLetter.length)];
                const myBigLetter2 = bigLetter[Math.round(Math.random()*bigLetter.length)];
                const mySpecialChar = specialChar[Math.round(Math.random()*specialChar.length)];
                const mySpecialChar2 = specialChar[Math.round(Math.random()*specialChar.length)];

                const myPassword = mySmallLetter + mySpecialChar + myNumber + mySmallLetter2 + mySpecialChar2 + myBigLetter + myBigLetter2 + mySmallLetter3;

                return myPassword;
            }


            numbers = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"];
                smallLetters = ["q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "a", "s", "d", "f", "g", "h", "j", "k", "l", "z", "x", "c", "v", "b", "n", "m"];
                bigLetters = ["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "A","S", "D", "F", "G", "H", "J","K", "L", "Z", "X", "C", "V", "B", "N", "M"];
                specialChars = ["!", "@", "#", "$", "%", "^", "&", "*", "-", "_", "+", "=", "~", "{", "}", "[", "]", ":", ";", ".", "?"];
            console.log(draw(numbers, smallLetters, bigLetters, specialChars));

            document.getElementById('password').value = draw(numbers, smallLetters, bigLetters, specialChars);
           
            (function()
                                {
                                    const my_password = document.getElementById('password').value;
                                    const containsNumber = /d*/;
                                    const checkboxNumber = document.getElementById('number');
                                    const containsBigLetter = /(A-Z)*/;
                                    const checkboxBigLetter = document.getElementById('bigLetter');
                                    const containsSmallLetter = /(a-z)*/;
                                    const checkboxSmallLetter = document.getElementById('smallLetter');
                                    const containsSpecialChar = /.*/;
                                    const checkboxSpecialChar = document.getElementById('specialChar');

                                    if(containsNumber.test(my_password))
                                    {
                                        checkboxNumber.setAttribute("checked", "true");
                                    }
                                        if (containsBigLetter.test(my_password))
                                        {
                                            checkboxBigLetter.setAttribute("checked", "true");
                                        }
                                            if(containsSmallLetter.test(my_password))
                                            {
                                                checkboxSmallLetter.setAttribute("checked", "true");
                                            }
                                                if (containsSpecialChar.test(my_password))
                                                {
                                                    checkboxSpecialChar.setAttribute("checked", "true");
                                                 }
                                })();
                
            </script>
    </body>

1 użytkowników online, w tym zalogowanych: 0, gości: 1