我试图只留下前缀(下例中的 WST)和数字。应删除任何后缀和文件扩展名。这应该让我保持完整的产品代码。
以下是三个可能的值:
39159 FLAN.jpg
22201-HAV.jpg
WST 503.jpg
这三个示例所需的输出是:
39159
22201
WST 503
这是我的 current ereg_replace
,但它也删除了数字前的前缀:
$number = ereg_replace("[^0-9]", "", $value);
我试图只留下前缀(下例中的 WST)和数字。应删除任何后缀和文件扩展名。这应该让我保持完整的产品代码。
以下是三个可能的值:
39159 FLAN.jpg
22201-HAV.jpg
WST 503.jpg
这三个示例所需的输出是:
39159
22201
WST 503
这是我的 current ereg_replace
,但它也删除了数字前的前缀:
$number = ereg_replace("[^0-9]", "", $value);
不推荐使用 ereg* 函数。你不应该再使用它们了。
$name = basename($value, '.jpg');
现在你有了没有扩展名的文件名$name
. 您可以将名称和编号拆分为单独的变量,如下所示:
$name = str_replace('-', ' ', $name);
if (is_numeric($name[0])) {
list($number, $garbage) = explode(' ', $name);
$prefix = null; unset($garbage);
}
else list($prefix, $number) = explode(' ', $name);
仅当前缀从不以数字开头时,此代码才能正常工作。但你明白了。
一种选择是删除最后一位数字之后的任何内容。如果名称中有多个数字,这可能无法按预期工作:
preg_replace("/\D+$/", "WST 503.jpg", "");
另一个可能更强的选择是捕获第一个数字,以及它之前的任何内容:
preg_match("/^\D*\d+/", "WST 503.jpg", $matches);
print_r($matches); // [0] => WST 503
<?php
function showProductNumberFromFilename($filename) {
// split filename
$filenameParts = explode('.', $filename);
// get extension
$extension = end($filenameParts);
// remove extension
$productNumber = str_replace($extension, '', $filename);
return substr($productNumber, 0, -1);
}
// echos 3159 FLAN
echo showProductNumberFromFilename('39159 FLAN.jpg');
// echos 22201-HAV
echo showProductNumberFromFilename('22201-HAV.jpg');
// echos WST 503
echo showProductNumberFromFilename('WST 503.jpg');
?>
快速而肮脏的脚本;-)