【问题标题】:Alternative way in php for if statement with too many "OR" ||php中if语句的替代方式“OR”过多||
【发布时间】:2016-11-24 04:54:30
【问题描述】:

我有这个 if 语句,可以在 types = text 的输入中检查这些“冒犯性词”

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';

       }

这段代码是由另一个开发人员编写的,我只是想知道除了为我必须输入的每个单词添加双管道之外还有其他方法吗?我猜它看起来有点像编写这样的代码的原始方式。

【问题讨论】:

  • 一个问题是,如果你真的想尽量避免冒犯的话,你需要在里面放更多的词。循环遍历一组模式进行匹配比一堆 OR 更易于管理。
  • 检查this answer
  • “OR ||”是否有任何缺点或不建议在代码中以这种方式使用,而不是凌乱且难以管理?
  • 如果您使用 strstr,请确保您也将检查它们的类型。由于 var_dump((bool)strstr('10', '0')) === false。所以总是用户 if(strstr('10', '0') !== false)

标签: php html text input


【解决方案1】:

小心过滤不好的词,shitake这个词呢?这是替换坏词并检查原始字符串的简单方法:

$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';
}

但是if|| 方法会更快。

【讨论】:

    【解决方案2】:

    我猜你要么坚持使用带有 OR 的 strstr/strpos,要么使用正则表达式。如果您有可枚举的停用词列表,我建议您避免使用正则表达式。

    【讨论】:

      猜你喜欢
      • 2012-08-20
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 2020-07-23
      • 1970-01-01
      • 2011-07-15
      相关资源
      最近更新 更多