4

在我的网站上,我让用户发送这样的标签:

tag tagtwo anothertag

我只想让他们使用单个空格和字母,所以我想删除数字、破折号、双空格等。所以无效的字符串是:

tag       tag2 another-tag

我有以下代码来执行此操作,但我不知道要使用的正确正则表达式。

$tags = strtolower($_POST['imgTags']);
$tags = preg_replace("/regex/", "", $tags);
$tagArray = explode(" ", $tags);

执行此操作的正确正则表达式是什么?另外,我可能想用 e 和 o 替换 é 和 ö。

4

6 回答 6

3

这将删除除字母和空格之外的任何内容:

$tags = preg_replace("/[^a-z ]/i", "", $tags);

然后这将折叠连续的空格:

$tags = preg_replace("/ {2,}/", " ", $tags);

如果您想允许其他类型的空白字符,但也用单个空格替换它们,请尝试以下操作:

$tags = preg_replace("/[^a-z\s]/i", "", $tags);
$tags = preg_replace("/\s+/", " ", $tags);

关于你的最后一句话:没有通用的方法。您将必须添加特定规则。但是,preg_replace_callback可能会帮助您确定未修改的字母。

于 2012-10-17T10:16:18.063 回答
1

要仅保留字母和空格,请使用:

$tags = preg_replace("/[^a-zA-Z\s]/", "", $tags);

要规范化空格,请添加:

$tags = preg_replace("/\s+/", " ", $tags);
于 2012-10-17T10:13:09.163 回答
1

所以我想删除数字、破折号、双空格

/([0-9\-]|[\s]{2,})/应该作为正则表达式

于 2012-10-17T10:14:04.663 回答
1

首先用一个替换多个空格和制表符:

/([ \t])[ \t]*/$1/

然后用 null 替换除字母和空格之外的所有内容:

/[^A-Za-z ]+//

PHP 代码

$tags = preg_replace('/([ \t])[ \t]*/', '$1', $tags);
$tags = preg_replace('/[^A-Za-z ]+/', '', $tags);

输入

tag       tag2 another-tag

输出

tag tag anothertag
于 2012-10-17T10:15:31.683 回答
1

很简单:

要删除数字和破折号:

$tags = preg_replace("/[0-9\-]/", "", $tags);

然后删除多个空格:

$tags = preg_replace("/[\s]{2,}/", " ", $tags);

正则表达式演示

于 2012-10-17T10:17:08.840 回答
0

正则表达式将是

[a-zA-Z ]+

这允许大写或小写字母和单个空格字符组合。

于 2012-10-17T10:12:33.483 回答