java - 使用正则表达式和匹配字符串方法的垃圾邮件过滤器

标签 java regex spam-prevention

对于一项学校作业,我们被要求使用正则表达式和字符串的 matches() 方法制作一个简单的垃圾邮件过滤器。这两个词是垃圾邮件和伟哥。即使拼写为小写或大写、重复字母或字符之间有空格,它也应该有效。例如“”V i AA gggg RrR aA”或“xxxSPAMyyy”。

这就是我现在拥有的

     if(Item.getSubject().matches("(?i).*s.*p.*a.*m.*") ||Item.getMessage().matches("(?i).*v.*i.*a.*g.*r.*a.*")){
        return false;
    }

它适用于上面显示的示例,但也适用于我不希望它工作的字符串。就像句子中的字符顺序正确一样。谁知道好的解决方案吗?

最佳答案

您可以对输入数据进行预处理或规范化,以使与正则表达式的匹配更加简单。例如,如果从输入中删除所有空格字符,则正则表达式将变得更加简单和可靠。在“Buy V i AA gggg RrR aA!!!”正常化之后将变成“BuyViAAggggRrRaA!!!”并且可以轻松地与“(?i).*v+i+a+g+r+a+.*”表达式匹配。当然,请记住,使用正则表达式永远不可能 100% 正确。

关于java - 使用正则表达式和匹配字符串方法的垃圾邮件过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46552677/

相关文章:

java - org.plasma.query.OrderBy 不工​​作

php - (PHP) 解析 RegEx 字符串 - 平衡括号

regex - 在 R 中的 grep 函数中使用正则表达式

ruby-on-rails - Rails/Devise - 防止垃圾邮件注册?

java - 文本从 JSpinner 到 JTextArea

Java 文字转语音我无法让它说话

java - 如何将一个对象放入数组中

java - 条件正则表达式使用 Java 匹配文本输入流中的组,忽略格式错误的行

javascript - 蜜 jar 实现

security - https 和 SSL 可以保护您的邮件地址不被收集并用作垃圾邮件?