我正在尝试从字符串中删除非字母数字字符,并将字符串限制为两个字。即:
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个空格,则问题确实存在。
帮助赞赏:)
由于
答案 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
?>