删除非字母数字字符并将字符串限制为两个单词

时间:2011-02-21 15:29:03

标签: php

我正在尝试从字符串中删除非字母数字字符,并将字符串限制为两个字。即:

foo bar baz    => foo-bar
boo   * test   => boo-test
te%st_foo      => test-foo

到目前为止,我已经得到了这个:

$term = preg_replace('/[^A-Za-z0-9 ]/', '', $term);
$words = explode(" ", $term);
$generated = strtolower(implode(" ",array_splice($words,0,2)));
$term = preg_replace('!\s+!', '-', $term);

但是在某个地方出了问题,这些都是我刚刚拼凑起来试图获得我所追求的结果的片段。

如果字符串等中有超过1个空格,则问题确实存在。

帮助赞赏:)

由于

3 个答案:

答案 0 :(得分:1)

首先通过删除多余的空格来规范化字符串,如下所示:

preg_replace('/[ ]+/', ' ', $term);

然后做其余的,它会起作用。

答案 1 :(得分:0)

为了将多个[白色]空间减少到单个空间,请使用:

$string = preg_replace("/[ \t\n\r]+/", " ", $string);

explode之前立即执行此操作。

答案 2 :(得分:0)

$str = preg_replace('/[^a-z]+/is', '-', $str);
$str = trim(str_replace('--', '-', $str), '-');
// now we have array of words
$str = explode('-', $str);
$str = $str[0].'-'.$str[1];

<强> UPD:

<?php
    $str = 'foo&*^%#*$&@^     bar          asjdhakhsgd';
    $str = preg_replace('/[^a-z]+/is', '-', $str);
    $str = trim(str_replace('--', '-', $str), '-');
    $str = explode('-', $str);
    $str = $str[0].'-'.$str[1];

    echo $str; // foo-bar
?>