当前位置: 首页 > 知识库问答 >
问题:

如何使用角度 5 验证器模式验证密码强度

谷博艺
2023-03-14

我需要验证密码输入表单字段的强度。要求是:

    < li >至少一个小写字符 < li >至少一个大写字符 < li >至少一个号码< br >(无论顺序)

我迄今为止搜索和尝试的结果如下,结果不一致。

它似乎验证了正则表达式验证的顺序。
我需要的是检查是否存在至少一个字符“类型”。

import { Component } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';

@Component({
    selector: 'signup',
    templateUrl: './signup.component.html',
    styleUrls: ['./signup.component.scss']
})
export class SignupComponent {

    form: FormGroup;

    constructor() {
        this.init();
    }

    init() {
        this.form = this.fb.group({
            name: ['', [Validators.required]],
            email: ['', [Validators.required, Validators.email],
            password: ['', [
                Validators.required, 
                Validators.pattern('((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,30})')
            ]]
        }); 
    }
}

共有3个答案

酆耀
2023-03-14

如果您看一下Validator.js,您会注意到您可以将一个字符串或一个正则表达式文字传递给< code>Validators.pattern。

作为字符串文字传递的正则表达式

  • 整个字符串必须与模式匹配(即模式锚定在两侧)
  • 反斜杠可以形成字符串转义序列,您必须使用双反斜杠来定义用于定义正则表达式转义的文本反斜杠。因此,要定义数字匹配模式,请使用'\\d';要定义空白模式,请用'\\s';要想定义反斜杠,请使用“\\\\'

正则表达式作为正则表达式文字传递

  • 正则表达式不会自动要求全字符串匹配。
  • 使用单个反斜杠定义正则表达式转义(例如/\s/

因此,您可以使用以下两种方法之一:

this.form = this.fb.group({
    name: ['', [Validators.required]],
    email: ['', [Validators.required, Validators.email],
    password: ['', [
        Validators.required, 
        Validators.pattern('(?=\\D*\\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).{8,30}')
 ]]
});

this.form = this.fb.group({
    name: ['', [Validators.required]],
    email: ['', [Validators.required, Validators.email],
    password: ['', [
        Validators.required, 
        Validators.pattern(/^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).{8,30}$/)
 ]]
});

正则表达式详细信息

请注意,我建议的图案变化仅仅是那些与对比原则相关的变化:

  • ^-字符串的开始(隐含在字符串正则表达式模式中)
  • (?=\D*\d)-必须有1位
  • (? =[^a-z]*[a-z])-必须有1个小写ASCII字母
  • (? =[^A-Z]*[A-Z])-必须有1个大写ASCII字母
  • .{8,30}-除换行符之外的任何8到30个字符
  • $-字符串结束(隐含在字符串正则表达式模式中)。

敖子安
2023-03-14

我无法正确使用验证器模式,所以我制作了一个自定义验证器,并使用三个简单的正则表达式验证密码字段字符串
无论如何,我期待正确使用Angular Validator模式。

自定义验证程序

// password.validator.ts

import { FormControl } from '@angular/forms';

export interface ValidationResult {
    [key: string]: boolean;
}

export class PasswordValidator {

    public static strong(control: FormControl): ValidationResult {
        let hasNumber = /\d/.test(control.value);
        let hasUpper = /[A-Z]/.test(control.value);
        let hasLower = /[a-z]/.test(control.value);
        // console.log('Num, Upp, Low', hasNumber, hasUpper, hasLower);
        const valid = hasNumber && hasUpper && hasLower;
        if (!valid) {
            // return what´s not valid
            return { strong: true };
        }
        return null;
    }
}

用我的自定义验证器替换了验证器模式

// signup.component.ts

import { Component } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { PasswordValidator } from 'validators/password.validator';

@Component({
    selector: 'signup',
    templateUrl: './signup.component.html',
    styleUrls: ['./signup.component.scss']
})
export class SignupComponent {

    form: FormGroup;

    constructor() {
        this.init();
    }

    init() {
        this.form = this.fb.group({
            name: ['', [Validators.required]],
            email: ['', [Validators.required, Validators.email],
            password: ['', [
                Validators.required, 
                PasswordValidator.strong
            ]]
        }); 
    }
}
颜光临
2023-03-14

我用Angular的内置模式验证器尝试了一下,能够得出以下检查:

>

  • 长度至少为 8 个字符
  • 小写字母
  • 大写字母
  • 数字
  • 特殊字符

    password: [
      '',
      [
        Validators.required,
        Validators.pattern('(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&].{8,}')
       ]
    ]
    

    我要补充的是,我绝不是正则表达式专家。这就是我在一个与OP密切相关的案例中使用的方法。也许它会帮助其他人。Mozilla的文档在解决这个问题上帮助很大,特别是编写正则表达式模式部分。

  •  类似资料:
    • 本文向大家介绍js如何验证密码强度,包括了js如何验证密码强度的使用技巧和注意事项,需要的朋友参考一下 验证“密码强度”的例子很常见,我们注册新的账号的时候往往设置密码,此时就遇到验证密码强度的问题了。“密码强度”也就是密码难易程度的意思。 原理: 1、如果输入的密码为单纯的数字或者字母:提示“低” 2、如果是数字和字母混合的:提示“中”  3、如果数字、字母、特殊字符都有:提示“强” 下面是一种

    • 本文向大家介绍js验证密码强度解析,包括了js验证密码强度解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章我们来说一个验证密码强度的例子,大家在进入一个网站的时候,往往都会先注册一个账号,然后输入密码,在输密码的时候,系统会根据我们输入的密码组成的复杂程度来给你的密码显示一个密码强度,一般就是强中弱三种,我们先来说一下密码验证的原理,原理明白了,js代码就好写了,今天的代码会用到正则表达式。

    • 我需要制作一个密码模式验证器 密码应具有: < li>1个大写字母 < li>1个小写字母 < li >一个号码 < li >最小长度为8。 我发现了这个正则表达式模式: 然而,验证器总是声称我的输入无效 根据 https://regex101.com/r/AfAdKp/1 此值应该是有效的。 编辑:澄清一下,Test1234应该可以工作

    • 问题内容: 我有一个看起来像这样: 到目前为止,我所有的验证都在模式中进行,我想知道如何通过密码验证来实现这一点。用户在两个字段中输入密码,并且模型应检查它们彼此是否相同。 这种验证是否属于架构?我是这种验证的新手。 我应该如何验证密码? 问题答案: 我最终发现,您可以结合使用 虚拟路径 和 函数来实现此目的(如本要点所示),以达到与密码匹配相同的目的: https //gist.github.c

    • 本文向大家介绍jquery判断密码强度的验证代码,包括了jquery判断密码强度的验证代码的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jquery判断密码强度的验证代码,分享给大家供大家参考。具体如下: 预想的效果截图如下: JS代码: 页面: 以上就是jquery判断密码强度的验证代码,大家可以应用到自己的项目中,希望大家喜欢。

    • 本文向大家介绍JavaScript实现密码强度实时验证,包括了JavaScript实现密码强度实时验证的使用技巧和注意事项,需要的朋友参考一下 JavaScript实现密码强度实时验证,供大家参考,具体内容如下 在网络服务中,为了保证用户的私密信息足够安全,会要求用户输入具有一定安全级别的密码,这样可以更好的防止他人盗用。比如在注册一些游戏账号时,如果输入纯数字或纯英文字符低于6位,就会提示密码强