上一期后的字符串替换

时间:2014-12-16 13:19:21

标签: php string preg-replace preg-match

这里我将文件名称设为$fileName

我想将文件名存储为

filename_randomnumber.extension

如果文件名是file.jpg那么它将是file_randomnumber.jpg

如果文件名是test.png,那么它将是test_randomnumber.png

我使用以下代码

$digits = 6;
$digits = rand(pow(10, $digits-1), pow(10, $digits)-1);
$val = $digits.'_.';
$gen_path = preg_replace("([.]+)", $val, $fileName);  //replacing . with _randomnumber.

我只是替换了。随机数和_

但威胁是

如果文件名有

test.image.png

然后该值将为test_randomnumber.image_randomnumber.png

我需要的是我需要更换最合适的。在文件名中找到。

结果将是test.image_randomumber.png

我该怎么做

3 个答案:

答案 0 :(得分:2)

您可以使用pathinfo()sprintf()

function getRandomFileName($fileName)
{
    $info = pathinfo($fileName);

    $digits = 6;
    $digits = rand(pow(10, $digits-1), pow(10, $digits)-1);

    if (isset($info['extension'])) {
        return sprintf('%s_%s.%s', $info['filename'], $digits, $info['extension']);
    } else {
        return sprintf('%s_%s', $info['filename'], $digits);
    }
}

echo getRandomFileName('test.jpg'); // test_838135.jpg

答案 1 :(得分:1)

我有一个小小的解决方法,可以满足您的需求。

最后爆炸后首先爆炸。 '时段'

$fileName = implode('.', explode('.', $string, -1));

其次在$fileName

的最右边获取扩展名
$ext = substr($string, strrpos($string, '.') + 1);

在Mid中你的$val将被连载

因此,您的代码必须

<?php
$fileName = 'b.a.png';
$string = $fileName;
$fileName = implode('.', explode('.', $string, -1));
$ext = substr($string, strrpos($string, '.') + 1);
$digits = 6;
$digits = rand(pow(10, $digits-1), pow(10, $digits)-1);
$val = $digits.'_.';
echo $fileName.$val.$ext;

答案 2 :(得分:0)

试试这个:

$genpath=substr_replace($fileName,"_".$digits,strrpos($fileName,"."),0);
  1. strrpos获取"."$fileName的最后位置。
  2. substr_replace将带有下划线的随机数插入点前的$fileName
  3. 假设文件名中已有一个点。