0

我正在尝试返回用户输入的密码,如果它匹配a-z, A-Z, 0-9, _-否则将在 try 子句中执行 ValueError 。这是我的代码行,它似乎不起作用,因为它几乎允许 (?.,@#$%^*)

return re.match('^[A-Za-z0-9_-]*$',password)
4

3 回答 3

2

使用 Kleene 闭包,您可以使用空字符串作为正确的密码。您可以使用+特殊字符匹配一个重复的有效字符:

def validate(password):
    match = re.match('^[a-z0-9_-]+$', password, re.I)
    if match is not None:
        return password
    else:
        raise ValueError
于 2013-04-09T23:16:38.033 回答
1

大纲

使用集合和集合减法可能是一个更简单的解决方案。

代码

from string import ascii_letters, digits

PASSWORD_SET = set(ascii_letters + digits + "_-")

def has_only_password_letters(candidate):
    return not(set(candidate) - PASSWORD_SET)

或者:

def has_only_password_letters(candidate):
    return all(c in PASSWORD_SET for c in candidate)

测试

>>> def test_password(password):
...     if has_only_password_letters(password):
...         print "Okay: ", password
...     else:
...         print "Nuh-uh: ", password
... 
>>> test_password("asdasd123123")
Okay:  asdasd123123
>>> test_password("asdasd123123!!!")
Nuh-uh:  asdasd123123!!!
于 2013-04-10T00:12:59.623 回答
0

这是使用的非正则表达式解决方案isalnum

for c in password:
    if not (c.isalnum() or c in ['_', '-']):
        raise ValueError('Invalid character in password')
于 2013-04-09T23:43:56.380 回答