RegEx匹配列表中的字符,除非存在另一个列表中的字符

问题描述 投票:0回答:1

我正在尝试构建正则表达式以验证应用程序中的密码。

这是PCRE(php)。

到目前为止,我的正则表达式看起来像这样

/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*\(\)_\+\-\=\[\]\{\}\|'])(?=.*[^\\\/])(?=.{8,20})/

我的标准如下

minimum length:            8
maximum length:            20
require special character: true
require uppercase:         true
require lowercase:         true
require number:            true
special character set:     !@#$%^&*()_+-=[]{}|'
excluded character set:    \/

一切正常,但排除的字符集有效。这个想法是密码不能包含该列表中指定的任何字符。

感谢您的帮助

php regex pcre
1个回答
0
投票

使用

/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*()_\-+=[\]{}|'])[^\/]{8,20}$/

请参见proof

替代:

/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*()_\-+=[\]{}|'])[A-Za-z0-9!@#$%^&*()_+\-=[\]{}|']{8,20}$/

请参见another proof

minimum length:            8                    <= {8,20}
maximum length:            20                   <= {8,20}
require special character: true                 <= (?=.*[!@#$%^&*()_\-+=[\]{}|'])
require uppercase:         true                 <= (?=.*[A-Z])
require lowercase:         true                 <= (?=.*[a-z])
require number:            true                 <= (?=.*[0-9])
special character set:     !@#$%^&*()_+-=[]{}|' <= [^\/]
excluded character set:    \/                   <= [^\/]
© www.soinside.com 2019 - 2024. All rights reserved.