Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将最少字符添加到';坏词';正则表达式?_Php_Regex - Fatal编程技术网

Php 将最少字符添加到';坏词';正则表达式?

Php 将最少字符添加到';坏词';正则表达式?,php,regex,Php,Regex,我制作了一个regex,它捕获“坏词”并用***替换,这样我就可以以一种形式返回给用户,如果发现坏词,可以在这里找到一个简化版本: https://regex101.com/r/alEb61/3 (?i)\b(Bitch)\b 我还希望在同一个正则表达式中至少需要25个字符,而不需要对它运行两个单独的过程(例如1)坏词2)足够的字符数?)这是可能的吗?我基本上需要在上面添加一些“少于25个字符”的管道。Regex最小值是{min,max},所以{1,15}最小值为1个字符,最大值为15 我会

我制作了一个
regex
,它捕获“坏词”并用***替换,这样我就可以以一种形式返回给用户,如果发现坏词,可以在这里找到一个简化版本:

https://regex101.com/r/alEb61/3

(?i)\b(Bitch)\b

我还希望在同一个正则表达式中至少需要25个字符,而不需要对它运行两个单独的过程(例如1)坏词2)足够的字符数?)这是可能的吗?我基本上需要在上面添加一些“少于25个字符”的管道。

Regex最小值是{min,max},所以{1,15}最小值为1个字符,最大值为15

我会列一个“坏话”列表,然后说至少有一个是存在的

就正则表达式限制而言,
/^[word]{1,15}$/
-必须找到1->15个“word”


查看此帖子

如果您计划替换列表中的任何坏单词,并且整个字符串短于25个字符,请使用

 $s = preg_replace('~^.{0,24}$|\b(?:badWord1|badWordN)\b~i', 'CENSURED', $s);

详细信息

  • ^.{0,24}$
    -第一个备选方案
  • |
    -或
  • \b(?:badWord1 | badWordN)\b
    -第二种选择:
    • \b
      -前导词边界
    • (?:
      -开始交替非捕获组
    • 坏词1
      -坏词1
    • |
      -或
    • 坏词N
      -坏词N
  • -组结束
  • \b
    -尾随词边界
如果您计划匹配任何长度超过24个字符的字符串,并且其中没有坏单词,请使用

'/^(?!.*\bbadword\b).{25,}$/s'
它将匹配一个至少有25个字符且不包含整个单词的
badword
的字符串

见a

详细信息

  • ^
    -字符串的开头
  • (?!.*\bbadword\b)
    -如果在任何0+字符之后有一个完整的单词
    badword
  • {25,}
    -任何25个或更多字符
  • $
    -字符串结束

最后,我创建了自己的版本,因为我只想在出现“坏词”或少于X的情况下捕获匹配项

^(?i)(?p\bBadWord1 | BadWordN\b)|(?p^.{0,25}$)$

哪些是可以测试的

这达到了我的目的

  • 如果没有坏单词且大于25个字符,则不会返回匹配项,甚至不需要替换(但可以使用)
  • 如果有不好的单词,它会指出这一点,并将其替换为*以便我可以用替换“不好的单词”的警报替换用户输入文本,我知道这是错误,因为捕获组名为
    words
  • 如果没有坏单词但没有足够的字符,它将以
    字符的形式返回捕获组,因此我可以返回该警报

您是说每个匹配至少应该有25个字符长(例如,Bitch将失败)?或者整个字符串应该是25个字符长?@AlexCollins我的意思是,除了没有任何坏单词匹配之外,输入字符串的总长度应该超过25个字符。我想
^.{0,15}$
会捕捉到这一点。谢谢,但事实上15个字符是整个字符串的最小值。我添加了
^.{0,15}$
作为一个条件(当然问题是我不能为用户提供“一刀切”的警报),这很好。这个链接很好,但我不是在寻找一个完美的实时坏词拦截器,它只是一种阻止亵渎和无意义输入的方法。你可以列一个“坏”字的列表,你可以检查它们中是否有任何一个是以字符串形式出现的,或者有一个或多个存在。最后,我做了一些稍微不同的事情,因为我的目标是找出哪些字是错的,如果有,替换掉,或者没有足够的字符。换句话说,我试图匹配一个不好的单词或者少于X个字符。看看我自己的answer@MarkH你的意思是说你正在使用类似于
preg_replace('~^.{0,15}$$|\b(?:badWord1 | badWordN)\b~,'commissed',$s)
?你的答案在哪里?我的答案在下面,我只是简单地提取了regex101生成的代码,yes似乎正在使用
preg_replace
(我将该代码提供给我的编码人员以在表单中实现)。@MarkH:但你的解决方案只会在字符串的开头找到不好的单词。在更新的答案中查看我的解决方案。