如何解决使用RegEx-单词过滤器的PHP preg_match
| 大家好, 我正在尝试使用preg_match来识别是否在文本字符串中找到一个单词。如果单词中每个字符有多个实例(按正确顺序),则需要拾取该单词。为了使自己的生活更加艰难,即使客户试图通过在我要匹配的单词中输入某些字符来“愚弄” preg_match,我也想选择这个单词。 它用于脏话过滤器,如果找到\'dave \',我将用其他东西替换它。我试图提出完美的正则表达式,但运气不佳。请参阅以下示例以及到目前为止发现的问题(我以3作为示例字符,客户端可以用来“愚弄”支票); 使用:~\\b(?:3+)?d+(?:3+)?a+(?:3+)?v+(?:3+)?e+(?:3+)?\\b~i
好的
输入:dave = pass
输入:3d3a3v3e3 =通过
输入:ddddaaaavvvveeee =通过
输入:3ave =失败
不行
输入:dd3ddaa3aa3vv3vvee3ee =失败(我希望它通过)
使用:~\\b[d3]+[a3]+[v3]+[e3]+\\b~i
好的
输入:dave = pass
输入:3d3a3v3e3 =通过
输入:ddddaaaavvvveeee =通过
输入:dd3ddaa3aa3vv3vvee3ee =通过
不行
输入:3ave =通过(我希望此操作失败)
感谢您对正则表达式的任何帮助,非常感谢。
解决方法
无需讨论它是否是一个很好的亵渎过滤器(可能不是!),以下正则表达式将满足您的要求:
d.*a.*v.*e
如果\'3 \'是唯一的\'special \'字符,请尝试以下操作:
d3*a3*v3*e
, 这不会工作。
例如,您的过滤器将阻止\“ firetruck \”;)
有人也可以用ѭ4代替ѭ5或ѭ6代替ѭ7
除了拥有大量已知单词及其拼写错误的白名单外,我不知道是否有一种构建亵渎性过滤器的好方法。
也许您应该重新考虑为什么要使用亵渎过滤器。如果您的\'客户\'想要,请让他们提供想要阻止的单词列表,这不是您的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。