1

プレフィックス (以下の例では WST) と番号のみを残そうとしています。サフィックスとファイル拡張子はすべて削除する必要があります。これにより、製品コードがそのまま残ります。

可能な値は次の 3 つです。

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

これら 3 つの例で必要な出力は次のとおりです。

39159
22201
WST 503

これが私の現在のereg_replaceですが、番号の前のプレフィックスも削除されます。

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

3 に答える 3

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 に答える
0

1 つのオプションは、最後の桁の後に何かを削除することです。名前に複数の数字が含まれている場合、これは期待どおりに機能しない可能性があります。

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

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 に答える