在php preg_replace中允许点

jay*_*jay 2 php regex preg-replace

我正在使用完美的PHP清理网址生成器来清理一些上传脚本的文件名(以及在其他地方清理我的永久链接).我如何修改它以允许.如果函数看起来像这样:

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;
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

编辑稍微修改了函数以反映我的实际用法 - 抱歉.

Jus*_*gan 8

所以你只是想避免替换文字.字符,这是正确的吗?如果点在字符类中,则应按字面解释,因此您的第一个正则表达式行将变为:

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