正则表达式 - 使用边界排除单词的问题
Regex - Issues with using Boundary to excluding words
在我的身份验证网站中,我使用正则表达式来控制黑名单密码。 (黑名单密码示例:12345678、123456789、棒球、足球)
我想添加新的正则表达式规则(使用边界),它将排除单词(黑名单密码)。我在 Whosebug 上阅读了一些类似的问题,并尝试用这样的方式声明它:
^(?!\b12345678\b|\b123456789\b|\bbaseball\b|\bfootball\b|\bsuperman\b).*$
这个正则表达式与上面的词不匹配,是正确的。例如 "Baseball" 与字母、数字或特殊字符(在 "baseball" 之前或之后)必须匹配。
但是“baseball!”与“!baseball”不匹配。你能给我一些建议吗?
But "baseball!" doesn't match contrary to "!baseball"…
baseball!
不匹配,因为您的模式在开头不允许 baseball
(^
后跟 baseball
的否定前瞻)。
!baseball
相反匹配,因为 !
放在开头,负前瞻只在那里完成,而不是在后面。
可以考虑将 .*
放在不同的地方,但那将一事无成。
只需在前瞻中包含锚点 ^
$
:
(?!^(12345678|123456789|baseball|football|superman)$)^.*$
(事实上,我们甚至可以删除初始的 ^
)。
在我的身份验证网站中,我使用正则表达式来控制黑名单密码。 (黑名单密码示例:12345678、123456789、棒球、足球)
我想添加新的正则表达式规则(使用边界),它将排除单词(黑名单密码)。我在 Whosebug 上阅读了一些类似的问题,并尝试用这样的方式声明它:
^(?!\b12345678\b|\b123456789\b|\bbaseball\b|\bfootball\b|\bsuperman\b).*$
这个正则表达式与上面的词不匹配,是正确的。例如 "Baseball" 与字母、数字或特殊字符(在 "baseball" 之前或之后)必须匹配。
但是“baseball!”与“!baseball”不匹配。你能给我一些建议吗?
But "baseball!" doesn't match contrary to "!baseball"…
baseball!
不匹配,因为您的模式在开头不允许 baseball
(^
后跟 baseball
的否定前瞻)。
!baseball
相反匹配,因为 !
放在开头,负前瞻只在那里完成,而不是在后面。
可以考虑将 .*
放在不同的地方,但那将一事无成。
只需在前瞻中包含锚点 ^
$
:
(?!^(12345678|123456789|baseball|football|superman)$)^.*$
(事实上,我们甚至可以删除初始的 ^
)。