這個貝葉斯方法,我用於過濾聯繫人提交和報價表格的請求相當成功。該表格使用評分並處理來自世界各地的各種語言的請求。如果他們在各個領域只有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);
?>
即使有人衝我有它複製我的嘗試,所以我可以修復我的得分。中文或韓文通常會有一些誤報,但大部分情況下,任何人填寫英文表格都會通過。像「無錫」這樣的名字確實存在。
第一個引用問題的接受答案是你應該採取的答案。這取決於你自己/管理部門監控數據庫並對無效名稱發出不良/懲罰/懲罰 – 2013-03-28 03:04:43
出於興趣,你爲什麼要這樣做? – Jim 2013-03-28 03:08:21
您可以查看[Levenshtein](http://php.net/manual/en/function.levenshtein.php)以及從那裏鏈接的其他類似功能。就像BCS碗的選擇一樣,只是通過一系列不同的測試來折騰他們,看看最終結果如何。但是,您可能需要一些原型。 – 2013-03-28 03:08:38