[英]Regex: Optional special characters
我有一个正则表达式,它具有以下规则:
+ Must contain lower case letters
+ Must contain upper case letters
+ Must contain a number
+ Must contain a (defined)special character
+ At least 8 chars
这有效,我的正则表达式如下所示:
((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~@#\$%\^&\*_\-\+=`|{}:;!\.\?\"()\[\]]).{8,25})
现在我只想在一件事情上改变这个正则表达式:特殊字符应该仍然是可能的(并且只有我允许的那些),但应该是可选的(不再需要)字符串中的任何地方。 所以新规则是
+ MAY contain (defined) special characters
我必须改变什么才能实现这一目标?
例子:
NicePassw0rd - NOT OK now, should be
NicePassw0rd%% - OK now (and still should be)
NicePassword - NOT OK now and shouldnt
您可以在那里测试我的正则表达式: https : //regex101.com/r/qN5dN0/1
您必须在模式的两端添加锚点^
和$
才能真正启用长度检查。 如果要禁止其他特殊字符,请将~@#$%^&*+=`|{}:;!.?\\"()\\[\\]-
到带有字母和数字的消耗部分(注意[A-Za-z0-9_]
与\\w
相同,如果您使用没有/u
标志的 PCRE):
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\w~@#$%^&*+=`|{}:;!.?\"()\[\]-]{8,25}$
这是它的作用:
^
- 字符串的开始(?=.*\\d)
- 至少需要一位数字(?=.*[az])
- 至少需要一个小写的 ASCII 字母(?=.*[AZ])
- 至少需要 1 个 ASCII 大写字母[\\w~@#$%^&*+=`|{}:;!.?\\"()\\[\\]-]{8,25}
- 仅匹配(=消耗)8 到 25 个符号字母数字或_
,或字符类中的所有字符$
- 字符串结尾当我们检查 0 个或更多字符而不是需要检查存在性和所需符号的字符时,基于前瞻中的对比原理的正则表达式将更有效。 查看包含(?=\\D*\\d)(?=[^az]*[az])(?=[^AZ]*[AZ])
的更正正则表达式:
^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])[\w~@#$%^&*+=`|{}:;!.?\"()\[\]-]{8,25}$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.