2014-12-04 87 views
2

出于某种原因,这个代码过滤掉的数字,我不知道为什么它做的是,如果有人能帮助我,将不胜感激。如何使用preg_replace()函数停止过滤数字?

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'。

回答

0

$string = preg_replace('#[^a-z\-]+#', '_', $string);表示:“代替一切的A-Z的范围,或者连字符与undescore既不字符”。

试试这个:

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

谢谢,它现在似乎正在工作。 – Tom 2014-12-04 20:19:07

+0

我很高兴听到这个消息:)如果我的回答帮你,请把它标记为答案:d – Forien 2014-12-04 20:20:21

+0

我会的,但我发现了另一个问题,由于某种原因,函数的工作我的index.php页面上,但是当我包括在另一个文件(在其他地图)的function.php文件时,它不工作了,它仍然取代所有的数字和东西。我没有正确包括它btw。 – Tom 2014-12-04 20:27:20

3

为什么不应该吗?

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

所以基本上,“任何不是a-z或短划线,用下划线替换”。

+0

谢谢,但现在没有任何筛选出一个空间,那就是它所需要的,除了所有其他的东西做的。 – Tom 2014-12-04 20:14:52

-1

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