首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制特殊字符的正则表达式除少数字符外

限制特殊字符的正则表达式除少数字符外
EN

Stack Overflow用户
提问于 2021-09-30 04:52:56
回答 2查看 1.6K关注 0票数 1

我能够编写一个正则表达式来验证输入框的以下标准。

至少包含14 characters

  • contain,至少一个大写字母( at )

  • 至少包含一个简单字母( at )

  • 至少包含一个数字(0-9)

  • 至少包含一个特殊符号(+=!@#$%^&*)

Regex -> ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[+=!@#$%^&*])(?=\\S+$).{14,}$

但是,此正则表达式允许其他未提及的特殊字符。我想限制除这些+=!@#$%^&*以外的所有特殊字符

有人能帮我用上述标准修改给定的正则表达式吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-30 05:01:40

与允许任何字符的.不同,您可以使用字符集将允许的字符限制在特定的集合上:

代码语言:javascript
复制
^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[+=!@#$%^&*])(?=\\S+$)[0-9A-Za-z+=!@#$%^&*]{14,}$
票数 2
EN

Stack Overflow用户

发布于 2021-09-30 08:10:44

为什么不使用sets而不是正则表达式:

代码语言:javascript
复制
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)

还可以使用翻译方法将每组字符转换为四种代码,然后检查这些代码是否准确地存在于已翻译的字符串中:

代码语言:javascript
复制
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))))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69386325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档