正则表达式实现过滤非法字符串

本文介绍了一个简单的PHP留言板程序,该程序能够过滤用户输入中的敏感词汇,例如“黑客”、“抓包”和“监听”。通过使用正则表达式进行匹配并替换为星号,确保了留言板内容的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 代码

1、index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>过滤留言板中的非法字符</title>
<style type="text/css">
<!--
body {
	margin-left: 0px;
	margin-top: 0px;
	margin-right: 0px;
	margin-bottom: 0px;
}
-->
</style></head>
<body>
<table width="1002" height="585" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="379" height="226">&nbsp;</td>
    <td width="445">&nbsp;</td>
    <td width="178">&nbsp;</td>
  </tr>
     <form id="form1" name="form1" method="post" action="index_ok.php">
  <tr>
    <td height="260">&nbsp;</td>
    <td align="center" valign="top"><table width="430" border="1" cellpadding="1" cellspacing="1" bordercolor="#FFFFFF" bgcolor="#99CC67">
      <tr>
        <td width="81" height="30" align="right" bgcolor="#FFFFFF">发布主题:</td>
        <td width="307" align="left" bgcolor="#FFFFFF"><input name="title" type="text" id="title" size="30" /></td>
      </tr>
      <tr>
        <td align="right" bgcolor="#FFFFFF">发布内容:</td>
        <td align="left" bgcolor="#FFFFFF"><textarea name="content" cols="43" rows="13" id="content"></textarea></td>
      </tr>
    </table></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td height="99">&nbsp;</td>
    <td align="center" valign="top"><table width="315" height="37" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td width="169" align="center"><input type="image" name="imageField" src="images/bg1.JPG" /></td>
        <td width="146" align="center"><input type="image" name="imageField2" src="images/bg3.JPG" onclick="form.reset();return false;" /></td>
      </tr>
    </table></td>
    <td>&nbsp;</td>
  </tr>
      </form>
</table>
</body>
</html>
 
2、index_ok.php
<?php 
$title=$_POST[title];
$content=$_POST[content];
$str="****";
$titles = preg_replace("/(黑客)|(抓包)|(监听)/",$str,$title);
$contents = preg_replace("/(黑客)|(抓包)|(监听)/",$str,$content);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>过滤留言板中的非法字符</title>
<style type="text/css">
<!--
body {
	margin-left: 0px;
	margin-top: 0px;
	margin-right: 0px;
	margin-bottom: 0px;
}
.STYLE1 {
	font-size: 12px;
	color: #855201;
}
-->
</style></head>
<body>
<table width="1002" height="585" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="400" height="226">&nbsp;</td>
    <td width="406">&nbsp;</td>
    <td width="196">&nbsp;</td>
  </tr>
     <form id="form1" name="form1" method="post" action="index_ok.php">
  <tr>
    <td height="260">&nbsp;</td>
    <td align="left" valign="top"><p class="STYLE1">发布主题:<?php echo $titles;?></p>
      <p class="STYLE1">发布内容:<?php echo $contents;?></p></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td align="center" valign="top">&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  </form>
</table>
</body>
</html>
 二 运行结果

 
发布主题:****
发布内容:****客 ****包
<think>嗯,用户问的是如何用Java正则表达式来匹配不含特殊字符的字符串。首先,我需要明确“特殊字符”的定义。通常,特殊字符可能指的是非字母数字的符号,比如!@#$%^&*()之类的。不过具体要看用户的需求,可能有时候下划线或连字符也被允许,比如在用户名中。 接下来,我得回忆一下Java正则表达式的语法。要匹配不包含某些字符,可以用否定字符类,比如[^...]。例如,如果允许字母、数字和下划线,可以写成^[a-zA-Z0-9_]*$。但用户可能希望排除更多符号,比如标点符号或者其他特殊字符。 然后,用户提供的引用中有提到类似的情况。引用[2]中的例子是^(?!.*(转发)).*$,用来排除包含“转发”的字符串。不过这里用的是否定前瞻,但用户的问题是否定字符类更合适。引用[4]里的例子用了分组和通配符,但可能不适用当前情况。 我需要构造一个正则表达式,确保字符串中所有字符都不在特殊字符集合内。例如,假设特殊字符包括!@#$%^&*()等,那么正则表达式应该是^[^!@#$%^&*()]*$。但可能需要更通用的方式,比如使用\W来匹配非单词字符,但\W包括下划线,所以可能需要调整。 另外,需要考虑是否允许空字符串。如果允许,用*量词;如果不允许,用+。比如^[\w-]+$可能允许单词字符、下划线和连字符,但不确定是否符合用户需求。这时候可能需要用户更明确的定义,但假设用户希望仅字母和数字,那么正则表达式可以是^[a-zA-Z0-9]*$。 用户引用的资料中,引用[3]提到使用正则表达式验证日期格式,这可能和构造特定模式有关,但这里的情况更简单,只是排除特定字符。因此,正确的做法是使用否定字符类,并列出所有不允许的字符,或者使用允许的字符集合。 总结一下,可能的解决方案是使用^[a-zA-Z0-9]*$来匹配仅包含字母数字的字符串。如果允许下划线或连字符,可以添加到字符类中。同时,需要转义特殊字符,比如在Java中,反斜杠需要写成双反斜杠,所以正则表达式字符串应该是"^[a-zA-Z0-9]+$"。 测试用例方面,比如"Hello123"应该匹配,"abc@123"则不匹配。另外,需要处理空字符串的情况,根据用户需求决定是否允许。最后,代码示例中应该使用Pattern和Matcher类,进行匹配验证。</think>### Java正则表达式匹配不含特殊字符的字符串的方法 #### 1. 正则表达式设计思路 要匹配**不含特殊字符**的字符串,核心逻辑是定义允许的字符范围,并通过正则表达式验证字符串是否完全由这些字符组成。以下是具体实现步骤: - **允许的字符定义**:通常包括字母(大小写)、数字、下划线`_`和连字符`-` - **正则表达式结构**:`^[允许的字符范围]+$` - **特殊字符排除**:通过字符类`[...]`的否定形式`[^...]`或直接限定允许的字符范围 #### 2. 示例代码 ```java public class RegexExample { public static void main(String[] args) { String input1 = "Hello123_Test"; String input2 = "abc@123"; // 包含特殊字符@ // 允许字母、数字、下划线和连字符 String regex = "^[a-zA-Z0-9_-]+$"; System.out.println(input1.matches(regex)); // 输出 true System.out.println(input2.matches(regex)); // 输出 false } } ``` #### 3. 正则表达式说明 | 符号 | 含义 | |-----------|------------------------------| | `^` | 匹配字符串开头 | | `[a-zA-Z]`| 允许所有大小写字母 | | `0-9` | 允许数字 | | `_-` | 允许下划线和连字符 | | `+` | 至少出现一次字符 | | `$` | 匹配字符串结尾 | #### 4. 自定义特殊字符范围 若需**严格排除特定符号**(如`!@#$%^&*()`),可使用显式排除: ```java String regex = "^[^!@#$%^&*()]+$"; // 匹配不含这些符号的字符串 ``` #### 5. 应用场景 - 用户名/密码格式验证 - 数据清洗时过滤非法字符 - API接口参数校验[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值