从已清理的标签创建数组

时间:2012-10-17 10:08:00

标签: php regex

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

tag tagtwo anothertag

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

tag       tag2 another-tag

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

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

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

6 个答案:

答案 0 :(得分: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可能会帮助您确定未修改的字母。

答案 1 :(得分:1)

只保留字母和空格:

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

要标准化空格,请添加:

$tags = preg_replace("/\s+/", " ", $tags);

答案 2 :(得分:1)

  

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

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

答案 3 :(得分: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

答案 4 :(得分:1)

这很简单:

删除数字和破折号:

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

然后删除多个空格:

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

<强> REGEX DEMO

答案 5 :(得分:0)

正则表达式将是

[a-zA-Z ]+

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