Preg_replace数字超过5位数

时间:2014-07-03 03:54:02

标签: php

我有一张图片上传表单。用户提交表单后,我的脚本将处理图像并清理图像文件名(我在文件名末尾添加一个唯一的数字系列,以防止可能的重复文件名。

我经常收到文件名(处理后),例如

"c-id-1333-l-id-1298491-aid-3951-id-13995346097186883-im-193-1.jpg"

如果数字超过5位数,我怎么能preg_replace数字,如果数字少于5位或更少,它将被保留。上面的例子应该给"c-id-1333-l-id--aid-3951-id--im-193-1.jpg"(不要介意多个连续短划线[ - ],我的脚本可以处理这个。

2 个答案:

答案 0 :(得分:1)

您可以使用以下方法执行此操作。

$str = 'c-id-1333-l-id-1298491-aid-3951-id-13995346097186883-im-193-1.jpg';
$str = preg_replace('/\d{5,}/', '', $str);
var_dump($str);

说明:

\d{5,} # digits (0-9) (at least 5 times)

输出:

string(41) "c-id-1333-l-id--aid-3951-id--im-193-1.jpg"

如果您想保留5个数字或少于5个数字,那么您可以改为使用\d{6,}

答案 1 :(得分:0)

用户提供的名称是否重要?

如果不是,我喜欢在这种情况下标准化文件名的一种方法是简单地用sha1甚至md5之类的方法对它们进行哈希处理。然后添加你的时间戳,ids或者不是那些,这会解决文件名中特殊字符的许多问题,例如“。”,“\”和“/”(点点划线和目录遍历)。

@hwnd的正则表达式应该可以解决问题,但是我会把它扔出去。

因此,通过散列,您可以获得更清晰(但不那么有意义)的名称

da39a3ee5e6b4b0d3255bfef95601890afd80709.jpg

然后您可以在

上添加您的唯一数字
da39a3ee5e6b4b0d3255bfef95601890afd80709-1234568764564558.jpg

你甚至可以先用时间戳对文件名进行加盐,然后对它们进行哈希处理以获得长度为40个字符的文件名,除非你处理成千上万的文件,否则哈希冲突的可能性非常小,在这种情况下只需要哈希到sha256等。