使用REGEX的OpenFire内容过滤器

时间:2013-07-17 08:45:40

标签: regex openfire profanity

您好我正在实施以下正则表达式以防止用户提交包含正则表达式中描述的亵渎内容的内容

(?i)(pecan|tie|shirt|hole|ontology|meme|pelagic|cock|duck|slot|anjing lo|Banting|Chiba|Screw|Screwing|fat|where|mother|peer|per|sock|socker|locker|ans|rect|anal|pickpocket|joker|muck)\b

我想改进正则表达式,所以它也过滤掉信用卡号码(主人,签证,jcb,美国运通卡等)

我有每张卡的正则表达式:

 ^4[0-9]{12}(?:[0-9]{3})?$ (Visa)
^5[1-5][0-9]{14}$ (Master)
^3[47][0-9]{13}$ (Amex)
^3(?:0[0-5]|[68][0-9])[0-9]{11}$ (Diners)
^6(?:011|5[0-9]{2})[0-9]{12}$ (Discover)
^(?:2131|1800|35\d{3})\d{11}$ (JCB)

然而,当我将这些信用卡amex与亵渎过滤器结合起来时,就像这样

<?>(?i)(山核桃| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | socker | locker | ans | rect | anal | pickpocket | joker | muck)\ b(?i)^ 4 [0-9] {12}(?:[0-9] {3})?$ \ b( ?i)^ 5 [1-5] [0-9] {14} $ \ b它将忽略亵渎过滤器。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

如果不使用正则表达式,过滤亵渎就是一个很好的例子!...任何想要发誓的人都可以通过输入“0”代替“o”或插入“。”来轻松绕过你的过滤器。在一个单词的中间,或其他数百种解决方法。如果你想做一些research,还有更好的选择。无论如何,忽略了......

首先,你真的需要用一个正则表达式模式吗?!如果将代码拆分为多行代码,您的代码将更具可读性并且更易于维护。

但如果你真的坚持这样做,你的模式就是寻找一个咒骂词,然后是一个签证号码,然后是一个主号码。你这里没有实现任何“或”条件。

答案 1 :(得分:0)

这是我见过的最愚蠢的政策要求之一。你的过滤器会遗漏很多亵渎,并会触发非亵渎;见Scunthorpe problem

然后,您的信用卡正则表达式已经排除了所有可能的脏话,因为它们只允许数字,因此很难构建一个脏话。

但如果你的老板坚持,请让他满意

(?i)^(?!.*(pecun|tai|shit|asshole|kontol|memek|pelacur|cock|dick|slut|anjing lo|bangsat|cibay|fuck|fucking|faggot|whore|motherfucker|peler|pler|suck|sucker|fucker|anus|rectum|anal|cocksucker|sucker|suck)\b)4[0-9]{12}(?:[0-9]{3})?$