我能够编写一个正则表达式来验证输入框的以下标准。
至少包含14 characters
Regex -> ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[+=!@#$%^&*])(?=\\S+$).{14,}$
但是,此正则表达式允许其他未提及的特殊字符。我想限制除这些+=!@#$%^&*以外的所有特殊字符
有人能帮我用上述标准修改给定的正则表达式吗?
发布于 2021-09-30 05:01:40
与允许任何字符的.不同,您可以使用字符集将允许的字符限制在特定的集合上:
^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[+=!@#$%^&*])(?=\\S+$)[0-9A-Za-z+=!@#$%^&*]{14,}$发布于 2021-09-30 08:10:44
为什么不使用sets而不是正则表达式:
import string
upperSet = set(string.ascii_uppercase)
lowerSet = set(string.ascii_lowercase)
numberSet = set("0123456789")
specialSet = set("+=!@#$%^&*")
allSets = [upperSet,lowerSet,numberSet,specialSet]
validSet = set().union(*allSets)
isValid = len(pw)>=14 and validSet.issuperset(pw) \
and all(s.intersection(pw) for s in allSets)还可以使用翻译方法将每组字符转换为四种代码,然后检查这些代码是否准确地存在于已翻译的字符串中:
validCheck = str.maketrans(string.ascii_letters + "0123456789" + "+=!@#$%^&*",
"1"*26+"2"*26+"3"*10+"4"*10)
isValid = len(pw)>=14 and set('1234') == set(pw.translate(validCheck))))https://stackoverflow.com/questions/69386325
复制相似问题