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

时间:2016-03-16 12:38:38

标签: regex word-boundary

在我的身份验证网站中,我正在使用正则表达式来控制黑名单密码。 (列入黑名单的密码:12345678,123456789,棒球,足球)

我想添加新的正则表达式规则(使用边界),这将排除单词(黑名单密码)。我已经在StackOverflow上阅读了一些类似的问题,并试图用这样的方式声明它:

procedure CDS1.OnNewRecord(DataSet: TDataSet);
begin
  DataSet.FieldByName('SomeField').AsString := '';  // this is NOT 
    // the same as leaving the field in its initial, NULL, state
end;

这个正则表达式与上面的单词不匹配,这是正确的。例如,带有字母,数字或特殊字符(“棒球”之前或之后)的“棒球”必须匹配。

但是“棒球!”与“!棒球”相反。你能给我一些建议怎么做吗?

1 个答案:

答案 0 :(得分:0)

  

但是" 棒球!"不会与" !棒球" ...

相反

baseball!无法匹配,因为您的模式在开头不允许baseball^后跟baseball的否定前瞻)。
!baseball在对比中匹配,因为!位于开头,而负向前瞻只在那里完成,而不是在后方。
人们可以考虑将.*放在不同的地方,但这将导致一无所获 只需在前瞻中包含锚点^ $

(?!^(12345678|123456789|baseball|football|superman)$)^.*$

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