Regex ile Angular desen doğrulaması


Bir şifre deseni doğrulayıcı yapmam gerekiyor

şifre şunlara sahip olmalıdır:

  • 1 büyük harf
  • 1 küçük harf
  • Bir sayı
  • Minimum uzunluk 8.

Bu regex desenini buldum:

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

ancak, doğrulayıcı her zaman girişimin geçersiz olduğunu iddia ediyor

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

https://regex101.com/r/AfAdKp/1 adresine göre, bu değer geçerli olması gerekiyor.

Düzenle: açıklığa kavuşturmak için, Test1234 çalışması gerekiyor

Cevap #1

Mevcut regex'inizle ilgili birden fazla sorun var:

  1. Regex’inizin karakter sınıfı için bir çarpan belirleyicisi yok
  2. Validators.pattern sınırlayıcılara ihtiyaç duymaz ama başına bir tane koymuşsun
  3. Simgeleri çift kaçış yapmalısınız.

İhtiyacınız olan şey şudur:

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

Canlı demoyu buradan görün

Cevap #2

Minimum 8 kez karakter sınıfını tekrarlamak için [A-Za-z\d!$%@#£€*?&]{8,} miktar belirleyicisini eklemeli ve büyük harf ve küçük harf için doğrulamaları ayırmalısınız:

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

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

  • ^ Dizenin başındaki konumu doğrula
  • (?=.*[A-Z]) Takip eden ifadenin büyük harf olduğunu doğrulamak için pozitif lookahead
  • (?=.*[a-z]) Ardından gelenin küçük harf olduğunu doğrulamak için pozitif lookahead
  • (?=.*\d) Ardından bir rakamın geldiğini doğrulamak için pozitif lookahead
  • [A-Za-z\d!$%@#£€*?&]{8,} Karakter sınıfındaki herhangi bir karakterle 8 veya daha fazla eşleş
  • $ Satırın sonunda konumu doğrula

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));
});

İlgili makaleler