2009-08-22 11 views
13

Bir parolada en az bir harf ve bir sayı olup olmadığını kontrol etmek için düzenli bir ifade yazmama yardımcı olan var mı?Belirli bir şifre C# içinde en az bir sayı ve bir harf içerip içermediğini kontrol etmek için düzenli ifade?

Kullanıcı parolalarının alfasayısal olması gerektiğine ve normal bir ifade kullanarak bunu kontrol edebilmem için bir ihtiyacım var. Eğer bir regex Daha okunaklı olabilir "[a-zA-Z].*\\d|\\d.*[a-zA-Z]" iki gerçi ayrı kontrolleri kullanabilirsiniz istiyorum

+0

Downvoted? Gerçekten mi? –

+10

@Paco: Yığın Taşması'nın sadece zor sorulara izin verdiğinin farkında değildim! – LukeH

+0

Luke ile aynı fikirdeyim. Yığın Taşıması, deneyimli bir profesyonelin bayt kodu çözme problemi veya 'WMI dokümantasyonu nerede' olduğu konusunda deneyimli olmak zorunda değildir. –

cevap

2
bool isValid = Regex.IsMatch(password, @"[a-zA-Z]") && 
       Regex.IsMatch(password, @"\d"); 
7

.

Düzenleme: aşağıdaki gibi görünebilir Oldukça okunabilir bulan iki çek, sahip bir yaklaşım:

Regex.IsMatch(password, "\\d") && Regex.IsMatch(password, "[a-zA-Z]") 
+0

Ve daha sonra, yalnızca alfasayısal karakterleri olup olmadığını sınamak için ek bir denetime ihtiyacınız var. –

21

Pozitif ilerleme aradığınız budur. regex şuna benzer:

İşte
(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]+ 

, (?=.*[A-Za-z]) dize en az bir karakterle ve (?=.*[0-9]) gibi en az bir rakam sahip olduğunu iddia olduğunu iddia pozitif ileri yönlü olduğunu. Olumlu bakışların bir eşleşme getirmediğini, bir eşleşmenin var olup olmadığını belirtmek önemlidir. Yani, bir önceki ifadeyi "en az bir karaktere sahip olduğunu, en az bir rakamı olduğunu iddia et, şu anda iddiaların ne olduğunu bildiğimizi, sadece alfasayısal karakterleri kontrol et" dediğini okumalısın.

Bu çok ilginçtir çünkü düzenli ifadenizi çok karmaşık hale getirmeden uygulamanızın doğrulama gereksinimlerini kolayca birleştirmenizi sağlar. Şimdi dize gerektiriyorsa Örneğin, tam 20 karakterlere sahip olmasını, sadece bu yüzden gibi yeni bir pozitif ileri yönlü iddiayı eklemek gerekir:

(?=[A-Za-z0-9]{20})(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]+ 

yardımcı olur Umut!

+0

neden olmasın? (? =. * [A-Za-z]) (? =. * [0-9]) [A-Za-z0-9] {20} –

+0

Olumlu bakışta niçin '. *' Ye ihtiyacınız var? Eğer ihmal ederseniz sonucun nasıl farklı olacağını anlamıyorum. – xr280xr

İlgili konular