我有一个字符串:
$string = "Hello World!";
我想把它变成一个URL友好的标签,我已经开发了一个功能来实现它:
function stripJunk($string){
$string = str_replace(" ", "-", $string);
$string = preg_replace("/[^a-zA-Z]\s/", "", $string);
$string = strtolower($string);
return $string;
}
但是,当我通过上面的$string
运行时,我会得到以下内容:
$string = "hello-world!";
似乎有些人物在我的preg_replace中滑落,即使根据我的理解,他们也不应该这样。
它应该是这样的:
$string = "hello-world";
这里发生了什么? (这应该是轻松的柠檬吱吱!)
编辑1 :我不知道正则表达式是初学者的东西,但无论如何。此外,删除我的字符串中的\ s不会产生所需的结果。
期望的结果是:
编辑2 + :稍微清理一下我的代码。
答案 0 :(得分:5)
以下对我来说很合适:
function stripJunk($string){
$string = str_replace(" ", "-", trim($string));
$string = preg_replace("/[^a-zA-Z0-9-]/", "", $string);
$string = strtolower($string);
return $string;
}
答案 1 :(得分:3)
模式末尾的\ s表示您只会替换紧跟空格字符的非字母字符。您可能希望在方括号内使用\ s,以便保留空格,以后可以用短划线替换。
如果您还想允许数字,则需要在方括号内添加0-9。
例如:
<?php
$string = "Hello World!";
function stripJunk($string){
$string = preg_replace("/[^a-zA-Z0-9\s]/", "", $string);
$string = str_replace(" ", "-", $string);
$string = strtolower($string);
return $string;
}
echo stripJunk($string);
答案 2 :(得分:1)
您可以在一行中使用一些正则表达式来删除垃圾:
<?php
function strip_junk ($string) {
// first, strip whitespace; and replace every non-alphabetic character by a dash
$string = preg_replace("/[^a-z0-9-]/u", "-", strtolower(trim($string)));
// second, remove double dashes
$string = preg_replace("/-+/u", "-", $string);
// finally, remove leading and trailing dashes
$string = preg_replace("/^-*|-*$/u", "", $string);
return $string;
}
?>
这应该可以解决问题,快乐的PHP!
答案 3 :(得分:0)
这个怎么样?
preg_replace("/[.\n\r][^a-zA-Z]/", "", $string);
如果不起作用:
preg_replace("/[.\n\r^a-zA-Z]/", "", $string);
这有用吗?