检查字符串是不是仅包含特定字符? [复制]
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 或类似网站上的每个模式以上是关于检查字符串是不是仅包含特定字符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章