1

我试图只留下前缀(下例中的 WST)和数字。应删除任何后缀和文件扩展名。这应该让我保持完整的产品代码。

以下是三个可能的值:

39159 FLAN.jpg
22201-HAV.jpg
WST 503.jpg

这三个示例所需的输出是:

39159
22201
WST 503

这是我的 current ereg_replace,但它也删除了数字前的前缀:

$number  = ereg_replace("[^0-9]", "", $value);
4

3 回答 3

0

不推荐使用 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);

仅当前缀从不以数字开头时,此代码才能正常工作。但你明白了。

于 2010-12-07T11:18:44.820 回答
0

一种选择是删除最后一位数字之后的任何内容。如果名称中有多个数字,这可能无法按预期工作:

preg_replace("/\D+$/", "WST 503.jpg", "");

另一个可能更强的选择是捕获第一个数字,以及它之前的任何内容:

preg_match("/^\D*\d+/", "WST 503.jpg", $matches);
print_r($matches);  // [0] => WST 503
于 2010-12-07T11:22:28.107 回答
0
<?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');
?>

快速而肮脏的脚本;-)

于 2010-12-07T11:26:46.803 回答