正则表达式 - 使用边界排除单词的问题

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)$)^.*$

(事实上,我们甚至可以删除初始的 ^)。