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
'/^(?!.*\bbadword\b).{25,}$/s'
它将匹配一个至少有25个字符且不包含整个单词的badword
的字符串
见a
详细信息
-字符串的开头^
-如果在任何0+字符之后有一个完整的单词(?!.*\bbadword\b)
badword
-任何25个或更多字符{25,}
-字符串结束$
^(?i)(?p\bBadWord1 | BadWordN\b)|(?p^.{0,25}$)$
哪些是可以测试的
这达到了我的目的
- 如果没有坏单词且大于25个字符,则不会返回匹配项,甚至不需要替换(但可以使用)
- 如果有不好的单词,它会指出这一点,并将其替换为*以便我可以用替换“不好的单词”的警报替换用户输入文本,我知道这是错误,因为捕获组名为
words
- 如果没有坏单词但没有足够的字符,它将以
字符的形式返回捕获组,因此我可以返回该警报
^.{0,15}$
会捕捉到这一点。谢谢,但事实上15个字符是整个字符串的最小值。我添加了^.{0,15}$
作为一个条件(当然问题是我不能为用户提供“一刀切”的警报),这很好。这个链接很好,但我不是在寻找一个完美的实时坏词拦截器,它只是一种阻止亵渎和无意义输入的方法。你可以列一个“坏”字的列表,你可以检查它们中是否有任何一个是以字符串形式出现的,或者有一个或多个存在。最后,我做了一些稍微不同的事情,因为我的目标是找出哪些字是错的,如果有,替换掉,或者没有足够的字符。换句话说,我试图匹配一个不好的单词或者少于X个字符。看看我自己的answer@MarkH你的意思是说你正在使用类似于preg_replace('~^.{0,15}$$|\b(?:badWord1 | badWordN)\b~,'commissed',$s)
?你的答案在哪里?我的答案在下面,我只是简单地提取了regex101生成的代码,yes似乎正在使用preg_replace
(我将该代码提供给我的编码人员以在表单中实现)。@MarkH:但你的解决方案只会在字符串的开头找到不好的单词。在更新的答案中查看我的解决方案。