PHP preg_match使用RegEx - Word Filter

时间:2011-06-11 21:48:49

标签: php regex preg-match

Hello All

我正在尝试使用 preg_match 来识别是否在一个文本字符串中找到了单个单词。如果单词中的每个字符有多个实例(按照正确的顺序),则需要拾取该单词。为了让自己的生活变得艰难,即使客户试图通过在我希望匹配的单词中输入某些字符来“欺骗”preg_match,我也想要接受这个词。

它用于脏话过滤器,如果找到'dave',我将用其他东西替换它。我试图想出完美的正则表达式,但我没有太多运气。请参阅以下示例和我到目前为止发现的问题(我使用3作为示例字符,客户可以用来“欺骗”支票);


使用:~\b(?:3+)?d+(?:3+)?a+(?:3+)?v+(?:3+)?e+(?:3+)?\b~i

  • 输入:dave = pass
  • 输入:3d3a3v3e3 =传递
  • 输入:ddddaaaavvvveeee = pass
  • 输入:3ave = fail

不行

  • 输入:dd3ddaa3aa3vv3vvee3ee =失败 (我希望此通过)

使用:~\b[d3]+[a3]+[v3]+[e3]+\b~i

  • 输入:dave = pass
  • 输入:3d3a3v3e3 =传递
  • 输入:ddddaaaavvvveeee = pass
  • 输入:dd3ddaa3aa3vv3vvee3ee = pass

不行

  • 输入:3ave =传递 (我希望失败)

感谢您对正则表达式的任何帮助,非常感谢。

2 个答案:

答案 0 :(得分:2)

这不会奏效。

例如,您的过滤器将阻止“firetruck”;)

有人也可以用u代替vc代替<

我不知道是否有一种建立亵渎过滤器的好方法,除了拥有大量已知单词和错误拼写的白名单。

也许你应该重新考虑为什么你想要亵渎过滤器。如果您的“客户”想要它,请让他们提供他们想要阻止的单词列表,这不是您的问题。

答案 1 :(得分:2)

不讨论它是否是一个好的亵渎过滤器(可能不是!),以下正则表达式将满足您的规范:

d.*a.*v.*e

如果'3'是唯一的'特殊'字符,那么试试这个:

d3*a3*v3*e