со старого известного скрипта.
// выражения, которые где угодно считаются матом
$f_pregmat='~'.
'[^и][hхx][уyu][йyяij]|'. // защита от: прихуй
'[hхx][уyu][eеЁ][tlvлвт]|'.
'[hхx][уyu][йyijoeоеёЁ]+[vwbв][oiоы]|'.
'[pп][ieие][dдg][eaoеао][rpр]|'.
'[scс][yuу][kк][aiuаи]|'.
'[scс][yuу][4ч][кk]|'.
'[3zsз][aа][eiе][bpб][iи]|'.
'[^н][eе][bpб][aа][lл]|'. // защита от: не бал*
'fuck|xyu|'.
'[pп][iи][zsз3][dд]|'.
'[z3ж]h?[оo][pп][aаyуыiеe]'.
'~si';
// сложные слова, типа "оскорблять", писать с пробелом перед словом
$f_pregmat2='~'.
' фак |'.
' лох |'.
' [бb6][лl]([яy]|ay)|'.
' [eiе][bpб][iи]|'.
' [eiе][bpб][aeаеёЁ][tlтл]'.
'~si';
if (preg_match($f_pregmat," $tmp ") || preg_match($f_pregmat2," $tmp ")) {
echo 'Не нужно ругаться!';
}