2012-10-17 146 views
4

在我的网站上创建阵列,我让用户发送代码是这样的:从清洁标签

tag tagtwo anothertag 

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

tag  tag2 another-tag 

我有下面的代码要做到这一点,但我不知道正确的正则表达式来使用。

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

什么是正确的regEx来做到这一点? 另外,我可能想用e和o替换é和ö。

回答

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可能会帮助您确定未修改的字母。

+0

不错,但你应该使用\ s来筛选出新行和制表符以及什么。 –

+0

我以为他真的只想要普通空间,第一行删除了所有其他空白字符。 –

+0

无论如何编辑它;) –

0

正则表达式将是

[a-zA-Z ]+ 

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

+0

而且连续的空格。 –

+0

正如@ m.buettner所说,它可能包含连续的空格,但我也想要与此相反,因为我正在使用preg_replace。 – BazzyTK

1

仅保存字母和空格使用:

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

为了归位加:

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

我不想要数字也没有连续的空格。 – BazzyTK

+0

我错过了数字部分,请看我更新的答案。 –

+0

工作,谢谢! – BazzyTK

1

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

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

+0

这种方法很有用,但它不会删除'或é,它会删除所有空格,即使是第一个。 – BazzyTK

+0

,但完全删除连续空格而不是将它们折叠到一个空格? –

+2

这将删除双空间而不是将它们转换为单曲,否? –

1

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

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

然后取代一切,但字母和空格与空:

/[^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 
1

这将是简单的:

要删除数字和破折号:

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

然后删除多个空格:

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

REGEX DEMO

+0

这将用空格替换非字母,非空格字符,而不是删除它们。 –

+0

已更正... @ m.buettner –

+0

现在它将删除空格而不是将它们折叠为一个;) –