2016-07-20 19 views
1

Ich habe dies bekommt if-Anweisung, die von einem anderen Entwickler für diese „Offensive Worte“ in einem Eingang Typen = textAlternative Möglichkeit in PHP für if-Anweisung mit zu vielen "ODER" ||

if(strstr($key,'bi**h') || strstr($key,'fu**k') || strstr($key,'son of a bit**') || strstr($key,'cun*') || strstr($key,'fuc**r') || strstr($key,'mother fuc**') || strstr($key,'shi**') || strstr($key,'cr**p')){ 

     $erros['insult']='please avoid any offending words'; 

     } 

Dieser Code prüft gemacht wird, wurde ich gefragt, nur gibt es eine weitere Möglichkeit, andere als Hinzufügen der Doppelpfeifen für jedes Wort, das ich eingeben muss ?. Es sieht irgendwie so primitiv aus, einen solchen Code zu schreiben.

+0

Ein Problem ist, wenn Sie wollen wirklich versuchen, keine beleidigenden Wörter zu vermeiden, Sie müssen viel mehr von ihnen hineinbringen. Das Überstreichen einer Reihe von Mustern, die zusammenpassen, würde für besser handhabbaren Code sorgen als eine Menge von ORs. –

+0

Überprüfen Sie [diese Antwort] (http://stackoverflow.com/questions/6284553/using-an-array-as-needles-in-strpos). –

+0

Hat das "ODER ||" irgendwelche Nachteile oder wird es nicht empfohlen, so in einem anderen Code verwendet zu werden als unordentlich und nicht zu verwalten? – MaryBaker

Antwort

1

Seien Sie vorsichtig mit schlechten Wortfiltern, was ist mit dem Wort shitake? Hier ist eine einfache Möglichkeit, schlechte Worte zu ersetzen und überprüfen gegen den Original-String:

$bad = array('bi**h', 'fu**k', 'son of a bit**', 'cun*', 'fuc**r', 'mother fuc**', 'shi**', 'cr**p'); 

if(str_replace($bad, '', $key) != $key) { 
     $erros['insult']='please avoid any offending words'; 
} 

jedoch der if und || Ansatz wird schneller sein.

-1

Ich denke, Sie bleiben entweder bei strs/strpos mit ORs oder verwenden reguläre Ausdrücke. Ich würde empfehlen, Regexps zu vermeiden, wenn Sie eine aufzählbare Liste von Stoppwörtern haben.

0

Ich würde nicht sagen, dass dies eine elegante oder bessere Lösung, aber wenn alles, was Sie fragen, eine anderer Weg, es zu tun, dann:

$curseWords = array('word','word','word','word','word','word','word','word'); 

foreach ($curseWords as $word) { 
if (strstr($key,$word)) { 
     $erros['insult'] = 'please avoid any offending words'; 
     break; 
} 

}