我想检查密码和用户名是否至少包含一个符号?

时间:2014-02-28 06:53:33

标签: python ascii

我想让这个函数在我的is_password_good函数中工作。

def is_ascii(some_string) :
    for each_letter in some_string:
        if ord(each_letter) < 128:
        return False
    return True

is_good_password函数确保用户的密码长度至少为10个字符,并且至少存在一个大写和小写。

如何通过ASCII功能检查用户是否使用ASCII标准至少使用一个符号创建密码?

def is_good_password(password):
    count_upper, count_lower = 0, 0
    for characters in password:
        if characters.isupper():
        count_upper += 1
        if characters.islower():
        count_lower += 1
    is_password_good = True
    if len(password) <= 10:
        print "Password is too weak, must be more than 10 characters long!"
    is_password_good = False
    if count_upper < 1 or count_lower < 1:
        print "Password must contain at least one uppercase and one lowercase character!"
        is_password_good = False
        create_user(database)
    print "Welcome! Username & Password successfully created!"
return is_password_good

5 个答案:

答案 0 :(得分:4)

您可以检查字符串中是否存在string.punctuation

>>>string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

答案 1 :(得分:2)

import re

def getmix(password):
    Upper=len(set(re.findall(r'[A-Z]',password)))
    Lower=len(set(re.findall(r'[a-z]',password)))
    Nums=len(set(re.findall(r'[0-9]',password)))
    Symb=len(set(re.findall(r'[~!@#$%^&\*()_+=-`]')))
    return (Upper, Lower, Nums, Symb)

应该给你一个很好的起点。

答案 2 :(得分:2)

如果字符串中的所有字符都不是字母或数字,函数somestring.isalnum()将返回False

这些类别的精确定义取决于区域设置;确保您知道您正在使用的语言环境。

通过by,ASCII只定义为字符代码127.如果你超过127,你需要知道你正在处理哪个字符集和编码。但是,像#!这样的字符确实是用ASCII定义的,并且字符代码的长度在30英尺范围内。无论如何,最好使用库函数抽象出精确的字符代码。

答案 3 :(得分:1)

has_symbol = False
for c in '~!@#$%^&*()_+=-`':
    if c in password:
        has_symbol = True
        break
if not has_symbol:
    print "Password must contain at least one uppercase and one lowercase character!"
    is_password_good = False

答案 4 :(得分:1)

始终使用内置的,不要自己滚动,所以本着这种精神,使用字符串模块作为规范的符号列表:

import string

symbols = string.punctuation

并打印symbols向我们展示了这些字符:

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

你可以传递给any“另一个可迭代的”构造:

if any(char in symbols for char in some_string):
    print 'password good'

但是,我实际上更喜欢set方法而不是上面的结构:

if set(symbols).intersection(some_string):
    print 'password good'

但是Triplee对isalnum的建议同样有效,不需要导入字符串模块,而且更短。

if not some_string.isalnum():
    print 'password good'