【发布时间】:2016-05-12 20:21:34
【问题描述】:
我已经建立了一个密码生成器:
Public Function PassGen()
Dim pool As String = "0123456789abcdefghijklmnopqrstuvwxzyABCDEFGHIJKLMNOPQRSTUVWXYZ+@*#%&/()?!$-"
Dim rnd As New Random
Dim result As String
Dim i As Integer = 0
Do Until i = 10
result &= pool(rnd.Next(0, pool.Length))
i = i + 1
Loop
Return result
End Function
现在我想检查生成的密码是否包含数字、大小写和特殊字符。如果生成的密码不包含这4个东西,它应该生成另一个密码并再次检查,等等。
我试图循环一个Regex.Match:
Dim text As String = PassGen()
Do Until Regex.Match(text, "^[0-9]$")
text = PassGen()
Loop
什么不起作用,因为它不会让我循环 regex.match()。
我也试过String.Contains()。但据我所知,包含方法只能检查一个字符串,而不能检查范围或类型(如整数)。
是否有可能检查我的这四个字符串范围的密码,或者我是否必须修改我的函数,它必须使用其中一个?
【问题讨论】:
-
您的正则表达式只检查 one 位。是的,它可以检查所有那些 四个字符串范围。你能提供一些有效的密码样本吗?最大长度是多少?
-
Do Until i = 10密码长度始终为 10。有效密码为:xE3)g21v%P -
您可以尝试使用
Do Until System.Text.RegularExpressions.Regex.IsMatch(text, "(?s)^(?=.*\d)(?=.*\p{Ll})(?=.*\p{Lu})(?=.*\W)") -
@WiktorStribiżew 非常感谢。成功了!
标签: regex vb.net string passwords