5

我想删除字符串中的任何类型的特殊字符,如下所示:

This is, ,,, *&% a ::; demo +  String.  +
Need to**@!/// format:::::
 !!! this.`

输出要求:

This is a demo String Need to format this

如何使用正则表达式做到这一点?

4

4 回答 4

15

检查非数字、非字母字符的任何重复实例并用空格重复:

# string(41) "This is a demo String Need to format this"
$str = trim( preg_replace( "/[^0-9a-z]+/i", " ", $str ) );

演示:http ://codepad.org/hXu6skTc

/ # 表示模式的开始
[ # 表示字符类的开始
 ^ # 不是,或否定
 0-9 # 数字 0 到 9(或者,“不是数字”,因为 ^
 az # 字母 a 到 z(或者,“不是字母或数字”,因为 ^0-9
] # 表示字符类结束
+ # 匹配字符类匹配的 1 个或多个实例
/# 表示模式结束
i # 不区分大小写,az 也表示 AZ
于 2012-05-30T05:48:51.243 回答
4

采用:

preg_replace('#[^a-zA-Z0-9 ]#', '', $yourString);

如果字符不是字母、数字或空格,则将其替换为空字符串。

例子:

$yourString = 'This is, ,,, *&% a ::; demo +  String.  + Need to**@!/// format::::: !!! this.`';
$newStr = preg_replace('#[^a-zA-Z0-9 ]#', '', $yourString);
echo $newStr;

结果:

This is a demo String Need to format this

因此,如果您愿意,可以通过将它们放入:

[^a-zA-Z0-9 ]

注意:此外,如果您不想在单词之间允许多个空格(尽管在浏览器中输出时不会显示它们),您需要使用它来代替:

preg_replace('#[^a-zA-Z0-9]+#', ' ', $yourString);
于 2012-05-30T05:41:30.857 回答
2
$string = preg_replace('/[^a-z]+/i', ' ', $string);

您可能还希望'在您的角色类中允许有连词,例如don'tnot be rolling into don t

$string = preg_replace('/[^a-z\']+/i', ' ', $string);

您可能还想在之后修剪它以删除前导和尾随空格:

$string = trim(preg_replace('/[^a-z\']+/i', ' ', $string));
于 2012-05-30T05:44:30.063 回答
2
echo preg_replace('/[^a-z]+/i', ' ', $str); 
// This is a demo String Need to format this 
于 2012-05-30T05:44:42.737 回答