私がフィルタリングに使用するこのベイジアン アプローチは、連絡先の送信と見積もりフォームのリクエストでかなりの成功を収めています。フォームはスコアリングを使用しており、世界中からのリクエストをさまざまな言語で処理します。さまざまなフィールドで 3 つまたは 4 つのテストに失敗した場合にのみ、スパムの試みとしてマークします。明らかに、「123456」のようなものは、電話番号に対して即座に危険信号を発します。また、コメントの BBCode は完全に無料です。
<?php
function nameCheck($var) {
$nameScore = 0;
//If name < 4 score + '3'
$chars_count = strlen($var);
$consonants = preg_replace('![^BCDFGHJKLMNPQRSTVWXZ]!i','',$var);
$consonant_count = strlen($consonants);
$vowels = preg_replace('![^AEIOUY]!i','',$var);
$vowel_count = strlen($vowels);
//We're expecting first and last name.
if ($chars_count < 4){
$nameScore = $nameScore + 3;
}
//if name > 4 and no spaces score + '4'
if (($chars_count > 4)&& (!preg_match('![ ]!',$var))){
$nameScore = $nameScore + 4;
}
if (($chars_count > 4)&&(($consonant_count==0)||($vowel_count==0))){
$nameScore = $nameScore + 5;
}
//if name > 4 and vowel to consonant ratio < 1/8 score + '5'
if (($consonant_count > 0) && ($vowel_count > 0) && ($chars_count > 4) && ($vowel_count/$consonant_count < 1/8)){
$nameScore = $nameScore + 5;
}
//Needs at least 1 letter.
if (!preg_match('![A-Za-z]!',$var)){
$nameScore = $nameScore + 10;
}
return $nameScore;
}
//added for testing
$var = $_GET['email'];
echo nameCheck($var);
?>
誰かがフラッシュしても、アテンプトでコピーしてスコアを修正できるようにします。通常、中国語または韓国語でいくつかの誤検知がありますが、ほとんどの場合、英語でフォームに記入する人は誰でも合格します. 「ウーシー」のような名前は存在します。