web-dev-qa-db-ja.com

Angular正規表現によるパターン検証

パスワードパターンバリデーターを作成する必要があります

パスワードには次のものが必要です。

  • 1大文字
  • 小文字1文字
  • 最小長は8です。

私はこの正規表現パターンを見つけました:

Validators.pattern('/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d!$%@#£€*?&]')

しかし、バリデータは常に私の入力が無効であると主張します

errors:    
   pattern:
      actualValue: "Test1234"
      requiredPattern: "^/^(?=.*[A-Za-z])(?=.*d)[A-Za-zd!$%@#£€*?&]$"

https://regex101.com/r/AfAdKp/1 によると、この値は有効であると想定されています。

編集:明確にするため、Test1234は機能するはずです

4
Nicolas

現在の正規表現に複数の問題があります:

  1. 正規表現に文字クラスの数量詞がありません
  2. Validators.pattern区切り文字は必要ありませんが、区切り文字を最初にスローしました
  3. トークンは2倍にする必要があります。

あなたが必要なのはこれです:

Validators.pattern('^(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=\\D*\\d)[A-Za-z\\d!$%@#£€*?&]{8,}$');

参照 ライブデモはこちら

10
revo

数量詞_[A-Za-z\d!$%@#£€*?&]{8,}_を追加して、文字クラスを最低8回繰り返し、大文字と小文字のアサーションを分離する必要があります。

_Validators.pattern('^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)[A-Za-z\\d!$%@#£€*?&]{8,}$')
_

^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d!$%@#£€*?&]{8,}$

  • _^_文字列の先頭に位置をアサート
  • _(?=.*[A-Z])_後続が大文字であることを表明する前向きな先読み
  • _(?=.*[a-z])_後に続くものが小文字であることを表明する前向きな先読み
  • _(?=.*\d)_後に続くものが数字であることを断言する前向きな先読み
  • _[A-Za-z\d!$%@#£€*?&]{8,}_文字クラスのいずれかの文字に8回以上一致します
  • _$_行末の位置をアサート
_const strings = [
  "A88888jf",
  "Aa88888jf",
  "Aa888jf",
  "AAAAAAAAAAA",
  "aaaaaaaaaaaaaa",
  "2222222222222222",
  "1sAdfe44",
  "$#fd#######"
];
let pattern = /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d!$%@#£€*?&]{8,}$/;

strings.forEach((s) => {
  console.log(s + " ==> " + pattern.test(s));
});_
1
The fourth bird