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

Php 去除非字母数字字符并将字符串限制为两个单词,php,Php,我试图从字符串中去掉非字母数字字符,并将字符串限制为两个单词。i、 e: 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(imp

我试图从字符串中去掉非字母数字字符,并将字符串限制为两个单词。i、 e:

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个空格等

感谢您的帮助:)


谢谢

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

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

然后执行其余操作,它将起作用。

将多个[空白]空间减少为单个空间使用:

$string = preg_replace("/[ \t\n\r]+/", " ", $string);
爆炸之前立即执行此操作

$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
?>


foobarbaz=>foobar
?你能解释一下吗?这似乎是@fredley的一个可能的副本。我想将输出字符串限制为只有两个单词,word1-word2