2017-10-11 98 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