允许在php preg_替换中使用点

允许在php preg_替换中使用点,php,regex,preg-replace,Php,Regex,Preg Replace,我正在使用一个上传脚本来清理一些文件名(以及在其他地方清理永久链接)。如果函数如下所示,我如何修改它以允许使用: setlocale(LC_ALL, 'en_US.UTF8'); function toAscii($str, $replace=array(), $delimiter='-', $exception = '') { if( !empty($replace) ) { $str = str_replace((array)$replace, ' ', $str);

我正在使用一个上传脚本来清理一些文件名(以及在其他地方清理永久链接)。如果函数如下所示,我如何修改它以允许使用

setlocale(LC_ALL, 'en_US.UTF8');
function toAscii($str, $replace=array(), $delimiter='-', $exception = '') {
    if( !empty($replace) ) {
        $str = str_replace((array)$replace, ' ', $str);
    }

    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
    $clean = strtolower(trim($clean, '-'));
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);

    return $clean;
}
提前谢谢


EDIT稍微修改了函数以反映我的实际使用情况-很抱歉。

所以您只想避免替换文字
字符,对吗?如果圆点位于字符类内,则应按字面解释,因此您的第一行正则表达式将变成:

$clean = preg_replace("/[^a-zA-Z0-9\/_|+ .-]/", '', $clean);

@杰罗斯:我觉得我可能误解了你的意图。您是否运行了上述版本,并且遇到了问题?你尝试过什么,结果如何?