2011-01-31 75 views
0

我正在嘗試構建自制垃圾郵件過濾器。並且想寫一個正則表達式來匹配下面的模式。我怎樣才能做到這一點?謝謝。如何在PHP中匹配這種隨機字符串?

UBmDNFZGrvtbFtxWMq

但這些種用空格或數字。

$ 800

不確定

我對用戶輸入的反饋,這樣的事情的一種形式。我正在嘗試檢測垃圾郵件。我嘗試使用谷歌reCaptcha網絡服務。但看起來難度很高,我不喜歡那樣。我認爲如果用戶第一次輸入錯誤,它會再次阻止一些用戶輸入。我還嘗試了一些跨篩選Web服務供應商,但它看起來像用戶消息將發送到他們的服務器。我對此感到不自在。

所以我想出了一個構建一個patten匹配函數來驗證一些用戶輸入表單值的想法。這個問題是我想要匹配的模式之一。

+1

到目前爲止您嘗試了哪些方法? – 2011-01-31 20:47:35

+3

描述一下你試圖匹配/不匹配 – justintime 2011-01-31 20:47:46

回答

6

我不打擾試圖製作垃圾郵件過濾器。這個問題已被很多其他人解決,如SpamAssassin

但是解決辦法可能是這個樣子的正則表達式來檢測字母的長字符串:

/\b[A-Za-z]{18,}\b/ 

細化,以避免合法的18個字母的單詞的錯誤匹配是檢查的東西,很少發生於正常也就是說,如大寫字母小寫字母后存在的:

/(?:[A-Z]*[a-z]+[A-Z])[A-Za-z]{18,}\b/ 

這仍然可能會給一些錯誤的匹配(例如命名爲「垃圾殺手」只是幾個字母總之這個正則表達式匹配的)。它將爲您提供的示例和大多數普通文本正確工作 - 但代碼示例不太好。

垃圾郵件檢測通常使用許多更復雜的技術,無法單獨使用正則表達式進行復制。查看其他指標(如每個字母的字母頻率)並檢查該單詞是否在字典中找到可能會更好。通常沒有單一的技術可以給出良好的結果 - 技術要求的組合需要每個技術得分。如果一封電子郵件觸發了太多高分的規則,那麼它會被標記爲垃圾郵件,但是如果它只觸及一些低分的規則,那麼它可能是可以接受的。評分系統可以由用戶配置。

編輯:關於問題的更新,因爲這是用於在Web表單上輸入數據的,所以防止垃圾郵件的一種標準方法是使用CAPTCHA,如reCAPTCHA