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:
- Regex’inizin karakter sınıfı için bir çarpan belirleyicisi yok
Validators.patternsınırlayıcılara ihtiyaç duymaz ama başına bir tane koymuşsun- 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));
});