如何检查字符串是否只包含小写字母和数字?

时间:2017-04-01 14:28:36

标签: python

如何检查字符串是否包含数字和小写字母?

我只设法检查它是否包含数字和小写字母并且不包含大写字母但我不知道如何检查它是否包含任何符号^& *(%等。 。

if(any(i.islower() for i in password) and any(i.isdigit() for i in password) and not any(i.isupper() for i in password)):

编辑: 显然我需要这样做而不使用任何循环,主要使用.islower(),. isdigit(),isalnum()等函数。我不知道如何检查字符串是否包含小写字母和数字只是,不使用循环或其他东西来检查字符串中的每个字符。我们只是开始学习python中的基础知识,所以他们告诉我们我们不能使用“for”和所有这些,即使我知道它的作用..现在我可以检查整个字符串是否只是数字或小写/大写字母但我不知道如何以最简单的方式检查上述两个条件

6 个答案:

答案 0 :(得分:4)

如何使用regex

>>> def is_digit_and_lowercase_only(s):
        return re.match("^[\da-z]+$", s)
>>> print is_digit_and_lowercase_only("dA")
None
>>> print is_digit_and_lowercase_only("adc87d6f543sc")
<_sre.SRE_Match object at 0x107c46988>

如果匹配失败,它将返回None,因此您可以将其与if一起使用。

答案 1 :(得分:1)

怎么样:

if all(c.isdigit() or c.islower() for c in password):

毕竟,您要检查所有字符是数字还是小写字母。因此,对于所有字符c,该字符为c.isdigit() or c.islower()。现在,all(..)可迭代值作为输入,并检查所有这些值的真实性是否为True。因此,从一个数字不满足我们的条件的那一刻起,all(..)将返回False

请注意,如果没有元素, all(..)True 。实际上,如果password是空字符串,全部,则字符满足此条件,因为没有字符。

修改

如果您要检查password是否包含数字和小写字符,您可以将条件更改为:

if all(c.isdigit() or c.islower() for c in password) and \
       any(c.isdigit() for c in password) and \
       any(c.islower() for c in password):

现在检查只有在password至少两个字符时才会成功:低位和数字。

答案 2 :(得分:1)

另一个解决方案是计算每种类型的字母,并确保它们不为零(在此上下文中,True等于1,False为0):

def validate_password(password):
    """
    Return True if password contains digits and lowercase letters
    but nothing else and is at least 8 characters long; otherwise
    return False.

    """

    ndigits = sum(c.isdigit() for c in password)
    nlower = sum(c.islower() for c in password)
    password_length = len(password)
    return (password_length > 7 and ndigits and nlower and
            (ndigits+nlower)==password_length)

答案 3 :(得分:1)

定义一个函数,该函数使用集合来测试成员资格。

import string
lower = set(string.ascii_lowercase)
digits = set(string.digits)
def valid(s):
    '''Test string for valid characters, and composition'''

    s = set(s)
    invalid = s.difference(lower, digits)
    both = s.intersection(lower) and s.intersection(digits)
    return bool(both and not invalid)

用法:

>>> valid('12234')
False
>>> valid('abcde')
False
>>> valid('A123')
False
>>> valid('a$1')
False
>>> valid('1a')
True
>>>

答案 4 :(得分:0)

您可以使用isdigit()或islower()方法检查字符串是否仅包含数字和小写字母

import string
input_str=raw_input()


for ch in input_str:

    if  ch.isdigit() or  ch.islower():
        output_str=True

    else:
        output_str=False
        break   

print output_str

答案 5 :(得分:0)

In [87]: '123anydigitorletterorevenunicodeßßидажелатиница'.isalnum()
Out[87]: True

In [88]: '123anydigitorletterorevenunicodeßßидажелатиница'.islower()
Out[88]: True

所以解决方法是

if password.islower() and password.isalnum():
    ...some code...

我不知道该如何迭代字符串