在我的网站上,我让用户发送这样的标签:
tag tagtwo anothertag
我只想让它们使用单个空格和字母,所以我想删除数字,破折号,双空格等。所以无效字符串将是:
tag tag2 another-tag
我有以下代码来执行此操作,但我不知道要使用正确的正则表达式。
$tags = strtolower($_POST['imgTags']);
$tags = preg_replace("/regex/", "", $tags);
$tagArray = explode(" ", $tags);
执行此操作的正确regEx是什么? 另外,我可能想用e和o替换é和ö。
答案 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 ]+
这允许大写或小写字母和单个空格字符组合。