如何删除混淆的电子邮件标头

时间:2014-12-10 01:47:59

标签: javascript regex

我试图编写一个正则表达式垃圾邮件过滤器,它会阻止这样的主题:

Subject:
..B..R..E_G-U E_T..___W..A..T..C..H-E S -_A T-___C H_E-A..P___P R-I_C E! .
-G_U..C..C_I..-..W_A_T C-H E_S---..A..T __C-H..E A P_--..P_R..I C..E
..C_H..O_P..A_R D---W-A T-C_H E S -- A_T.._-C..H-E A P_--P..R..I C_E! 

我能够提出:

w([^a-zA-Z0-9]){1,3}a([^a-zA-Z0-9]){1,3}t([^a-zA-Z0-9]){1,3}c([^a-zA-Z0-9]){1,3}h([^a-zA-Z0-9]){1,3}e([^a-zA-Z0-9]){1,3}s([^a-zA-Z0-9]){1,6}

将标准变体捕获到" watch",但我怀疑如果它们开始使用Unicode拼写,它会捕获它们。更不用说它不仅不优雅,它的丑陋我的猫试图掩埋它!

什么是更好的方式?

看起来Mozilla正在使用Javascript格式的正则表达式 - http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

1 个答案:

答案 0 :(得分:1)

看起来你的正则表达式会起作用,但是如果你只想清理一些,试试这个:

w[\W_]+a[\W_]+t[\W_]+c[\W_]+h[\W_]+e[\W_]+s

我不会考虑更优雅,但它更清洁。

使用\W表示“非单词字符”(它是[^A-Za-z0-9_]的简写),与_结合使用,结果与您的结果相同:[^A-Za-z0-9]

使用+而不是具有特定金额的量词,因为它可能会有所不同,实际上每个点中至少有一个会表示垃圾邮件。

如果你想尝试更优雅的东西尝试以相同的模式捕捉其他主题(这是正则表达式的优点),请使用:

(\w[\W_]+){4,}