正则表达式限制特殊字符,少数除外
regex to restrict special characters except few
我能够编写一个正则表达式来验证输入框的以下标准。
- 至少包含 14 个字符
- 包含至少 1 个大写字母 (A-Z)
- 包含至少 1 个简单字母 (a-z)
- 包含至少 1 个数字 (0-9)
- 包含至少 1 个特殊符号 (+=!@#$%^&*)
正则表达式 -> ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[+=!@#$%^&*])(?=\S+$).{14,}$
但是,此正则表达式允许其他未提及的特殊字符。我想限制除这些 +=!@#$%^&*
之外的所有特殊字符
有人可以帮我根据上述条件修改给定的正则表达式吗?
您可以使用字符集将允许的字符限制为特定集,而不是允许任何字符的 .
:
^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[+=!@#$%^&*])(?=\S+$)[0-9A-Za-z+=!@#$%^&*]{14,}$
为什么不用集合来代替正则表达式:
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)
您还可以使用 translate 方法将每组字符转换为四个代码,然后检查这些代码是否准确地出现在翻译后的字符串中:
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))))
我能够编写一个正则表达式来验证输入框的以下标准。
- 至少包含 14 个字符
- 包含至少 1 个大写字母 (A-Z)
- 包含至少 1 个简单字母 (a-z)
- 包含至少 1 个数字 (0-9)
- 包含至少 1 个特殊符号 (+=!@#$%^&*)
正则表达式 -> ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[+=!@#$%^&*])(?=\S+$).{14,}$
但是,此正则表达式允许其他未提及的特殊字符。我想限制除这些 +=!@#$%^&*
有人可以帮我根据上述条件修改给定的正则表达式吗?
您可以使用字符集将允许的字符限制为特定集,而不是允许任何字符的 .
:
^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[+=!@#$%^&*])(?=\S+$)[0-9A-Za-z+=!@#$%^&*]{14,}$
为什么不用集合来代替正则表达式:
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)
您还可以使用 translate 方法将每组字符转换为四个代码,然后检查这些代码是否准确地出现在翻译后的字符串中:
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))))