检查字符串是不是仅包含特定字符? [复制]

Posted

技术标签:

【中文标题】检查字符串是不是仅包含特定字符? [复制]【英文标题】:check if a string only contains specific characters? [duplicate]检查字符串是否仅包含特定字符? [复制] 【发布时间】:2021-12-05 06:55:11 【问题描述】:

我需要检查一个字符串(密码验证器)是否包含特定字符和长度在python中。条件之一是,字符串 pwd 仅包含字符 az、AZ、数字或特殊字符“+ "、"-"、"*"、"/"。

块引用

这些实用程序应该可以帮助我解决它(但我不明白):

使用 isupper/islower 来决定字符串是大写还是小写 案例 使用isdigit判断是否为数字 使用 in 运算符检查特定字符是否存在于 字符串。

pwd = "abc"

def is_valid():
    # You need to change the following part of the function
    # to determine if it is a valid password.
    validity = True

    # You don't need to change the following line.
    return validity

# The following line calls the function and prints the return
# value to the Console. This way you can check what it does.
print(is_valid())

非常感谢您的帮助!

【问题讨论】:

我建议您在互联网上查找“正则表达式”或正则表达式 【参考方案1】:

我们可以在这里使用re.search 作为正则表达式选项:

def is_valid(pwd):
    return re.search(r'^[A-Za-z0-9*/+-]+$', pwd) is not None

print(is_valid("abc"))   # True
print(is_valid("ab#c"))  # False

【讨论】:

【参考方案2】:

您可以使用正则表达式,但由于该任务仅涉及检查字符是否属于 set,因此仅使用 python sets 可能更有效:

def is_valid(pwd):
    from string import ascii_letters
    chars = set(ascii_letters+'0123456789'+'*-+/')
    return all(c in chars for c in pwd)

例子:

>>> is_valid('abg56*-+')
True

>>> is_valid('abg 56*')
False

使用正则表达式的替代方法:

def is_valid(pwd):
    import re
    return bool(re.match(r'[a-zA-Z\d*+-/]*$', pwd))

【讨论】:

另外,您可以在正则表达式中检查长度。例如,您需要至少 8 个字符:return bool(re.fullmatch(r'[a-zA-Z\d*+-/]8,', pwd))。这就是整个函数,一行与正则表达式:) @Expurple 肯定正则表达式在应用更多约束时很好,我没有看到有问题的长度约束;) 我的其他评论无法再编辑了:(我刚刚注意到我们的字符类有一个错误。+-/ 将被解释为一个范围。需要转义-。这就是为什么最好总是仔细检查regexr.com 或类似网站上的每个模式

以上是关于检查字符串是不是仅包含特定字符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何检查变量是不是以特定字符串开头? [复制]

检查列是不是包含类型字符串(对象)

检查字符串是不是仅包含数字

检查字符串是不是仅包含数字

如何检查字符串是不是仅包含 ASCII?

检查字符串是不是包含 Velocity 中的特定子字符串