我正在执行一个程序来确定vb.net中密码的强度
" STRONG"的特点密码如下:
1)必须至少有8个字符
2)必须是字母,数字和符号的组合
3)必须至少有2个大写字母和
4)不得有2个相同的字符彼此相邻。
实施例: b @ LLp3n = WEAK
P @ ssw0rd = WEAK
k3Yb0Ard! =强
C0MPUT3R =弱
S + @ Rcr4ft = STRONG
问题: 我关心的是检查彼此相邻的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 :(得分: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
,这将需要在第1组中捕获2次相同的字符。