我正在寻找一个正则表达式来验证输入,该输入应包含以下四个字符组中的至少三个:
English uppercase characters (A through Z)
English lowercase characters (a through z)
Numerals (0 through 9)
Non-alphabetic characters (such as !, $, #, %)
提前致谢。
编辑:这适用于.NET Framework
答案 0 :(得分:4)
不是一个正则表达式,但认为这是方式:
int matchedGroupCount = 0;
matchedGroupCount += Regex.IsMatch(input, "[a-z]") ? 1 : 0;
matchedGroupCount += Regex.IsMatch(input, "[A-Z]") ? 1 : 0;
matchedGroupCount += Regex.IsMatch(input, "[0-9]") ? 1 : 0;
matchedGroupCount += Regex.IsMatch(input, "[!*#%, etc..]") ? 1 : 0;
if (matchedGroupCount >= 3)
pass
else
failed
答案 1 :(得分:0)
说实话,我想不出直接的方法:正则表达式不是非常支持“必须包含”。你用什么语言写这个?就个人而言,我通过依次检查每个正则表达式并计算你得到的匹配数来做到这一点,所以在python中它会是这样的:
#!/usr/bin/python
import re
count = 0
mystring = "password"
regexp = re.compile(r'[A-Z]')
if regexp.search(mystring) is not None:
count += 1
regexp = re.compile(r'[a-z]')
if regexp.search(mystring) is not None:
count += 1
# etc
if count < 3:
print "Not enough character types"
你也可以用以下方式更干净地做到这一点:
#!/usr/bin/python
import re
regexpArray = [re.compile(r'[A-Z]'), re.compile(r'[a-z]'), re.compile(r'\d'), re.compile(r'[^A-Za-z0-9]')]
count = 0
for regexp in regexpArray:
if regexp.search(mystring) is not None:
count += 1
if count < 3:
print "Not enough character types"
或者,您可能会有一个非常复杂的正则表达式,包含许多选项(以不同的顺序)或者您可以通过Google找到的各种密码强度检查器之一。
修改
没有正则表达式的python方法将如下所示。我确信这里有一个.NET等价物,它比正则表达式匹配要快得多。
#!/usr/bin/python
import string
mystring = "password"
count = 0
for CharacterSet in [string.ascii_lowercase, string.ascii_uppercase, "0123456789", r'''!"£$%^&*()_+-=[]{};:'@#~,<.>/?\|''']:
# The following line adds 1 to count if there are any instances of
# any of the characters in CharacterSet present in mystring
count += 1 in [c in mystring for c in CharacterSet]
if count < 3:
print "Not enough character types"
可能有更好的方法来生成符号列表。