2

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

(?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

我想改进正则表达式,以便它也过滤掉信用卡号(master、visa、jcb、amex 等)

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

 ^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)

但是,当我将这些信用卡美国运通卡与这样的亵渎过滤器结合使用时

(?i)(pecan|tie|shirt|hole|ontology|meme|pelagic|cock|duck|slot|anjing lo|Banting|Chiba|Screw|Screw|fat|where|mother|peer|per|sock|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 它将忽略脏话过滤器。

谁能指出我正确的方向?

4

2 回答 2

0

这是我见过的最愚蠢的政策要求之一。您的过滤器会漏掉很多脏话,并会触发非脏话;参见斯肯索普问题

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

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

(?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})?$
于 2013-07-17T08:58:18.807 回答
0

当不使用正则表达式时,过滤脏话是一个很好的例子!......任何想要发誓的人都可以通过输入“0”而不是“o”或插入“。”轻松绕过您的过滤器。在一个单词或数百个其他解决方法的中间。如果您想进行一些研究,还有更好的选择。反正无视...

首先,您真的需要在单个正则表达式模式中执行此操作吗?!如果您将其拆分为多行代码,您的代码将看起来更具可读性并且更易于维护。

但如果你真的坚持这样做,你的模式是寻找一个脏话,然后是一个签证号码,然后是一个硕士号码。您还没有在这里实现任何“或”条件。

于 2013-07-17T08:56:20.027 回答