发布于 2026-01-06 2 阅读
0

以下是我如何使用 JavaScript 创建一个强大的密码检查器。步骤 1 - 编写基本结构。步骤 2 - 创建密码输入框。步骤 3 - 创建验证清单。步骤 4 - 显示/隐藏密码。步骤 5 - 添加验证。

以下是我如何使用 Javascript 制作一个强大的密码检查器。

第一步——编写基本结构。

步骤 2 - 创建密码输入框。

步骤 3 - 创建验证清单。

步骤 4 - 显示/隐藏密码。

步骤 5 - 添加验证

本文将介绍我如何制作一个简单的密码强度检测器,用于检查密码强度。您可能在大多数现代网站上都见过这种类型的检测器或验证工具。那么,让我们来看看我是如何制作的。

在上面的预览中,您可以清楚地看到我们将要制作的内容。页面上有一个密码输入框,您可以直接在那里输入密码。当您将焦点放在该输入框时,会弹出一个验证清单,列出密码应包含的内容。一旦您开始输入,清单就会检查是否满足所有条件。此外,右侧还有一个眼睛图标,点击即可查看密码。下方是一个视频教程,我将在其中逐步演示如何制作这个项目。

视频教程

如果你看到了,不妨也订阅一下这个频道。好了,回到正题,我们来看看这篇博客是怎么写的。

一切运行情况如何?

如果你只想快速了解一下它的工作原理,那就看看这里。我使用 CSS:focus选择器来显示/隐藏复选框,底层则使用regexJavaScript 来验证密码,每次都会触发一个keyup使用正则表达式的事件test()。至于眼睛图标,它的作用是事件发生切换password输入框的状态typetextpasswordtextclick

那我们开始写代码吧。

第一步——编写基本结构。

那么,我们先从基本的 HTML 结构开始。创建一个index.html文件和style.css一个app.js文件。然后添加基本的 HTML 结构boiler code,并链接 CSS 和 JS 文件。类似这样👇



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Strong Password Validation</title>

    <!-- Google Fonts -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet">

    <!-- Font Awesome CDN -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">

    <link rel="stylesheet" href="style.css">

</head>
<body>

    <script src="app.js"></script>

</body>
</html>


Enter fullscreen mode Exit fullscreen mode

在上面的代码中,我Google Fonts - Poppins也有FontAwesomeCDN。



* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body{
    background: #d34970;
    min-height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    font-family: 'Poppins', sans-serif;
}


Enter fullscreen mode Exit fullscreen mode

基本框架搭建完成后,我们就可以进行下一步了。

步骤 2 - 创建密码输入框。

要创建密码输入框,首先让我们创建一个div内部元素<body>来包裹元素input以及type=password图标eye,并给它们添加类名,以便我们可以在 CSS 文件中设置它们的样式。



<body>

    <div class="password-input-box">

        <input type="password" placeholder="Password" class="password-input">
        <i class="fa-solid fa-eye show-password"></i>

    </div>

</body>


Enter fullscreen mode Exit fullscreen mode


.password-input-box{
    position: relative;
    width: 300px;
    height: 40px;
}

.password-input{
    width: 100%;
    height: 100%;
    background: #fff;
    border: none;
    padding: 5px 15px;
    outline: none;
    border-radius: 5px;
    color: #d34970;
    padding-right: 45px;
}

.password-input::placeholder{
    color: #d34970;
}

.password-input:focus{
    box-shadow: 0 0 0 3px #d34970,
                0 0 0 6px #4fe222;
}

.show-password{
    position: absolute;
    right: 15px;
    top: 50%;
    transform: translateY(-50%);
    cursor: pointer;
    color: #92203f;
}


Enter fullscreen mode Exit fullscreen mode

输出

图片描述

步骤 3 - 创建验证清单。

既然我们现在有了密码输入框,就还需要一个验证清单框,以便在前端向用户显示密码需要符合哪些条件。因此,在类div名为 `with` 的元素内password-input-box创建一个新div的清单框,并在其中ul创建一个无序列表来创建检查点。类似这样👇



<div class="password-checklist">
    <h3 class="checklist-title">Password should be</h3>

    <ul class="checklist">
        <li class="list-item">At least 8 character long</li>
        <li class="list-item">At least 1 number</li>
        <li class="list-item">At least 1 lowercase letter</li>
        <li class="list-item">At least 1 uppercase letter</li>
        <li class="list-item">At least 1 special character</li>
    </ul>
</div>


Enter fullscreen mode Exit fullscreen mode


 .password-checklist{
    position: absolute;
    top: calc(100% + 10px);
    width: 100%;
    padding: 20px 30px;
    background: #ef547f;
    border-radius: 5px;
}

.checklist-title{
    font-size: 15px;
    color: #922037;
    margin-bottom: 10px;
}

.checklist{
    list-style: none;
}

.list-item{
    padding-left: 30px;
    color: #fff;
    font-size: 14px;
}

.list-item::before{
    content: '\f00d';
    font-family: FontAwesome;
    display: inline-block;
    margin: 8px 0;
    margin-left: -30px;
    width: 20px;
    font-size: 12px;
}

.list-item.checked{
    opacity: 0.5;
}

.list-item.checked::before{
    content: '\f00c';
    color: #922037;
}


Enter fullscreen mode Exit fullscreen mode

输出

图片描述

所以,让我们用 Javascript 来实现所有功能吧。

步骤 4 - 显示/隐藏密码。

在 JavaScript 中,我们可以做的第一件事是将密码输入框type从` password<input> ` 切换text回 `<input> password`。为此,我们首先需要在 JavaScript 中选择 `<input>`icon和 `<input>` input。之后,我们可以使用`<input>` 方法添加click事件,并在回调函数中使用 `if` 和 `else` 语句来检查当前的密码类型以及需要更改的类型。iconaddEventListener

你可以从下面的代码中详细了解这一点。



// show password toggler

let showPasswordBtn = document.querySelector('.show-password');
let passwordInp = document.querySelector('.password-input');

showPasswordBtn.addEventListener('click', () => {

    // toggle icon 

    // font awesome class for eye icon
    showPasswordBtn.classList.toggle('fa-eye'); 

    // font awesome class for slashed eye icon
    showPasswordBtn.classList.toggle('fa-eye-slash');

    // ternary operator a shorthand for if and else to change the type of password input
    passwordInp.type = passwordInp.type === 'password' ? 'text' : 'password';

})


Enter fullscreen mode Exit fullscreen mode

步骤 5 - 添加验证

现在我们已经完成了这个项目的主要功能。接下来让我们看看我是如何实现的。

所以首先我们需要隐藏复选框,只在密码输入框获得焦点时才显示它,我们可以这样做。



.password-checklist{
    ... 
    opacity: 0;
    pointer-events: none;
    transform: translateY(20px);
    transition: .5s ease;
}

.password-input:focus ~ .password-checklist{
    opacity: 1;
    transform: translateY(0);
}


Enter fullscreen mode Exit fullscreen mode

所以,只有当密码输入框处于焦点状态时,这个框才会显示。现在编写 JavaScript 代码。



// string password validation

let passwordChecklist = document.querySelectorAll('.list-item');

let validationRegex = [
    { regex: /.{8,}/ }, // min 8 letters,
    { regex: /[0-9]/ }, // numbers from 0 - 9
    { regex: /[a-z]/ }, // letters from a - z (lowercase)
    { regex: /[A-Z]/}, // letters from A-Z (uppercase),
    { regex: /[^A-Za-z0-9]/} // special characters
]

passwordInp.addEventListener('keyup', () => {
    validationRegex.forEach((item, i) => {

        let isValid = item.regex.test(passwordInp.value);

        if(isValid) {
            passwordChecklist[i].classList.add('checked');
        } else{
            passwordChecklist[i].classList.remove('checked');
        }

    })
})


Enter fullscreen mode Exit fullscreen mode

如果你阅读上面的 JS 代码,你会看到validationRegex一个变量,这个变量是一个数组,regex其中包含了我们想要验证密码的每个条件的表达式。数组内部包含键为 `key` 的对象regex,该键对应的值就是 `key` expression。创建这个数组时,你需要记住一点:确保表达式的索引号与<li>HTML 中的条件一致。也就是说,如果 HTML 文件中有一个<li>长度为 8 个字符的字符串,那么数组中的第一个元素应该是regex对应 8 个字符的表达式,否则你会在 UI 界面上看到错误提示,表明验证了错误的条件。

总之,回到 JavaScript 部分,一旦我们有了正则表达式数组,我就会在keyup事件发生时遍历它passwordInp。在遍历过程中,我们会选择每个正则表达式,并使用相应test()的方法来验证其password值,然后将布尔值存储在一个isValid变量中。

最后,我使用 If 和 else 语句来添加或删除标签的checked<li>

完成所有步骤后,您最终将拥有一个功能齐全的密码验证器。希望您喜欢这篇文章,并觉得它对您有所帮助。感谢阅读本文。如果您有任何建议、疑问或想分享任何内容,请随时在评论区留言。如果您有兴趣学习如何制作功能齐全的网站,可以访问我的YouTube频道。

文章来源:https://dev.to/themodernweb/here-is-how-i-made-a-strong-password-checker-using-javascript-3m9o