2017-10-11 62 views
1

我做一個程序,將確定在vb.net一個密碼的強度彼此的2點相同的字符密碼檢驗器 - 檢查與相鄰

「強」密碼的特點如下:

1)必須具有長的至少​​8個字符

2)必須是字母,數字和符號

3)的組合必須有至少2個大寫字母和

4)不得有2個相同的字符彼此相鄰。

實施例: b @ LLp3n =弱

2P @ ssw0rd =弱

k3Yb0Ard! =斯特朗

C0MPUT3R =弱

S + @ Rcr4ft =強

問題: 我的關心是用於檢查相鄰彼此的2個相同的字符正確的代碼。

這裏是代碼:

Public Class Form1 
Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click 
    Dim password As String = txtInput.Text 
    Dim numUpper As Integer = 2 
    Dim passLength As Integer = 8 
    Dim specialLength As Integer = 1 


    Dim upper As New Text.RegularExpressions.Regex("[A-Z]") 
    Dim specialChar As New Text.RegularExpressions.Regex("[^a-zA-Z0-9]") 


    If password.Length < passLength Then 
     MessageBox.Show("The Password Is Weak-") 
    ElseIf upper.Matches(password).Count < numUpper Then 
     MessageBox.Show("The Password Is Weak!") 
    ElseIf specialChar.Matches(password).Count < specialLength Then 
     MessageBox.Show("The Password Is Weak+") 
    Else 
     MessageBox.Show("The Password Is Strong") 
    End If 
End Sub 
End Class 

我希望有人能幫助我摸不着頭腦。

+0

'如果Regex.IsMatch(password,「(。)\ 1」)'...... –

+0

非常感謝@WiktorStribiżew:) – m1ks

+0

看到我的答案,我添加了一些更多的細節。 –

回答

1

您可以添加其他If條件,你的方法:

If Regex.IsMatch(password,"(.)\1") Then 
    MessageBox.Show("There are identical consecutive chars!") 
End If 

(.)\1模式將匹配和捕捉任何字符,但換行符(與(.))和\1反向引用第1個值將匹配相同的字符在組1中捕獲。見the regex demo

您可以進一步加強這一點。比方說,你允許兩個相同的連續字符,但你不想讓3個相同的字符條紋。然後使用(.)\1{2},這將需要在第1組中捕獲相同字符的兩次。

+1

非常感謝你@Wiktor 我現在明白了。我真的很感謝正則表達式參考。我會盡快使用它。 – m1ks