将最小字符添加到“坏词”中正则表达式?

时间:2017-08-23 14:52:32

标签: php regex

我制作了body { margin: 0; font-family: 'Lato', sans-serif; } .overlay { height: 100%; width: 0; position: fixed; z-index: 1; top: 0; left: 0; background-color: rgb(0,0,0); background-color: rgba(0,0,0, 0.9); overflow-x: hidden; transition: 0.5s; } .overlay-content { position: relative; top: 25%; width: 100%; text-align: center; margin-top: 30px; } .overlay a { padding: 8px; text-decoration: none; font-size: 36px; color: #818181; display: block; transition: 0.3s; } .overlay a:hover, .overlay a:focus { color: #f1f1f1; } .overlay .closebtn { position: absolute; top: 20px; right: 45px; font-size: 60px; } @media screen and (max-height: 450px) { .overlay a {font-size: 20px} .overlay .closebtn { font-size: 40px; top: 15px; right: 35px; } }来捕捉“坏词”。并用***替换,所以如果找到坏词,我可以返回给用户,可以在这里找到简化版本:

<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>

<div id="myNav" class="overlay">
  <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
  <div class="overlay-content">
    <a href="#">About</a>
    <a href="#">Services</a>
    <a href="#">Clients</a>
    <a href="#">Contact</a>
  </div>
</div>

<h2>Fullscreen Overlay Nav Example</h2>
<p>Click on the element below to open the fullscreen overlay navigation menu.</p>
<p>In this example, the navigation menu will slide in, from left to right:</p>
<span style="font-size:30px;cursor:pointer" onclick="openNav()">&#9776; open</span>

<script>

</script>
     
</body>
</html>

我还要在同一个正则表达式中要求最少25个字符,而不是必须在其上运行两个单独的传递(例如1)坏词2)足够的字符?)是可能的吗?我基本上需要添加一些&#34;少于25个字符&#34;管。

3 个答案:

答案 0 :(得分:1)

正则表达式最小值为{min,max}所以{1,15}最小值为1个字符,最多为15个。

我会做一个“坏词”列表,然后说必须存在至少1个

就正则表达式限制而言/^[word]{1,15}$/ - 必须为1 - &gt;发现15“字”

查看此帖Profanity Filter using a Regular Expression (list of 100 words)

答案 1 :(得分:1)

如果您打算替换列表中的任何坏词以及短于25个字符的整个字符串,请使用

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

请参阅regex demo

<强>详情

  • ^.{0,24}$ - 第一个替代
  • | - 或
  • \b(?:badWord1|badWordN)\b - 第二种选择:
    • \b - 领先的字边界
    • (?: - 开始交替非捕获组
    • badWord1 - 坏词#1
    • | - 或
    • badWordN - 坏词N
  • ) - 小组结尾
  • \b - 一个尾随字边界。

如果您打算匹配任何长度超过24个字符且没有错误字符的字符串,请使用

'/^(?!.*\bbadword\b).{25,}$/s'

它将匹配一个至少包含25个字符但不包含badword字符串的字符串。

查看regex demo

<强>详情

  • ^ - 字符串开头
  • (?!.*\bbadword\b) - 如果在任何0+字符之后有一个完整的单词badword
  • ,则表示未通过匹配的否定前瞻
  • .{25,} - 任何25个或更多字符&#39;
  • $ - 字符串结束。

答案 2 :(得分:0)

最后我创建了我自己的版本,因为我想要做的只是捕获匹配,如果有一个“坏词”或者如果少于X.

^(?i)(?P<Words>\bBadWord1|BadWordN\b)|(?P<Characters>^.{0,25}$)$

可以测试here

这符合我的目的

  • 如果没有坏词并且&gt; 25个字符它不返回匹配,甚至不需要替换(但可以使用)
  • 如果有错误的单词,它表示并用*代替它们,所以我可以用警告替换用户输入文本来替换'坏词',我知道这是错误,因为捕获组被命名为{{1 }}
  • 如果没有坏词但没有足够的字符,它会将捕获组返回Words,因此我可以返回该警报。