【问题标题】:How to check if a string is strictly contains both letters and numbers如何检查字符串是否严格包含字母和数字
【发布时间】:2025-12-07 06:10:02
【问题描述】:

如何检查字符串是否严格包含字母和数字?

以下还不够?

def containsLettersAndNumber(input):
    if input.isalnum():
        return True
    else:
        return False


isAlnum = containsLettersAndNumber('abc')           # Should return false
isAlnum = containsLettersAndNumber('123')           # Should return false
isAlnum = containsLettersAndNumber('abc123')        # Should return true
isAlnum = containsLettersAndNumber('abc123$#')      # Should return true

请注意,它必须包含字母和数字

【问题讨论】:

标签: python python-2.7


【解决方案1】:

您可以循环浏览并跟踪您是否找到了字母以及是否找到了数字:

def containsLetterAndNumber(input):
    has_letter = False
    has_number = False
    for x in input:
        if x.isalpha():
            has_letter = True
        elif x.isnumeric():
            has_number = True
        if has_letter and has_number:
            return True
    return False

或者,一种更 Pythonic 但更慢的方式:

def containsLetterAndNumber(input):
    return any(x.isalpha() for x in input) and any(x.isnumeric() for x in input)

【讨论】:

  • 这行得通。是的。感谢您在这里理解我的观点
【解决方案2】:

仅使用字符串方法的最简单方法:

def containsLetterAndNumber(input):
    return input.isalnum() and not input.isalpha() and not input.isdigit()

input.isalnum 如果 S 中的所有字符都是字母数字,则返回 true, input.isalpha 如果输入包含任何非字母字符,则返回 false,并且 input.isdigit 如果输入包含任何非数字字符,则返回 false

因此,如果input 包含任何非字母数字字符,则第一次检查为假。如果not input.isalpha(),那么我们知道input 至少包含一个非字母字符——它必须是一个数字,因为我们已经检查了input.isalnum()。同样,如果not input.isdigit() 为True,那么我们知道input 至少包含一个非数字字符,必须是字母字符。

【讨论】:

  • 一个班轮解决方案总是很有吸引力!
  • Lambda?: containsLetterAndNumber = lambda input : input.isalnum() and not input.isalpha() and not input.isdigit()
【解决方案3】:

你也可以使用正则表达式 bool(re.match('^[a-zA-Z0-9]+$', 'string'))

【讨论】:

    最近更新 更多