如何使用preg_replace()停止过滤数字?

时间:2014-12-04 20:10:11

标签: php

出于某种原因,这段代码过滤了数字,我不知道为什么会这样做,如果有人可以帮助我,那将不胜感激。

function makeFriendly($string){
    $string = strtolower(trim($string));
    $string = str_replace("'", '', $string);
    $string = preg_replace('#[^a-z\-]+#', '_', $string);
    $string = preg_replace('#_{2,}#', '_', $string);
    $string = preg_replace('#_-_#', '-', $string);
    return preg_replace('#(^_+|_+$)#D', '', $string);
}

如果我现在这样做:

echo makeFriendly('123asd');

它只显示' asd'。

3 个答案:

答案 0 :(得分:3)

为什么不应该呢?

$string = preg_replace('#[^a-z\-]+#', '_', $string);
                          ^--- NOT
                           ^^^-- a,b,c,....,z
                               ^--- dash

所以基本上,“任何不是a-z或破折号的东西,用下划线代替”。

答案 1 :(得分:0)

$string = preg_replace('#[^a-z\-]+#', '_', $string);表示:'用下划线替换范围或连字符中既不是字符的所有内容。

试试这个:

$string = preg_replace('#[^0-9a-z\-]+#', '', $string);

答案 2 :(得分:-1)

您需要删除$string = preg_replace('#[^a-z\-]+#', '_', $string);