1

我正在尝试使用 Angular 6 反应式表单构建注册表单。

 ngOnInit() {
this.registerForm = this.formBuilder.group({
  firstName: ['', [Validators.required],
  lastName: ['', [Validators.required]],
  email: ['', [Validators.required, Validators.email]],
  password: ['', [Validators.required, Validators.pattern('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&].{8,}$')]],
  confirmPassword: ['', [Validators.required, Validators.pattern('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&].{8,}$')]]
});

}

如何进行验证,以便允许:

  • 数字
  • 首都
  • 小写字母
  • 任何特殊字符
  • 最少 8 个字符

我使用的这个正则表达式工作正常,但我不能使用任何其他特殊字符,例如我尝试过Demoo123#但没有工作。不过Demoo123@效果很好。我认为特殊字符部分的正则表达式存在问题。我是否必须手动提及所有允许的特殊字符?或者有什么捷径吗?我在某处读到正则表达式不喜欢主题标签#……这是真的吗?

另一个问题是如何进行确认验证,以便确认密码值必须与密码字段值相同?

4

3 回答 3

3

问题是我没有在密码字段中添加模式属性。<input pattern="^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&].{8,}$" >

那是相当有线的。为什么我需要在代码中指定时在输入上指定它?不知道,但它有效。

于 2018-08-20T03:41:38.927 回答
1

formGroup 中的 TypeScript 验证

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

消息:密码必须包含超过 8 个字符、1 个数字、1 个大写字母和 1 个特殊字符($@$!%*?&)。

于 2021-05-03T07:31:05.830 回答
0

将 RegEx 作为参数传递对我有用:

Validators.pattern(new RegExp("^(?=.*[A-Z])(?=.*[!@#\$%\^&\*])(?=.{9,}))")

或者我们可以在模式的两端使用正斜杠:

/your_pattern_here/

例如:

Validators.pattern(/^(?=.*[A-Z])(?=.*[!@#\$%\^&\*])(?=.{9,}))/)

于 2021-06-04T15:17:22.387 回答