2010-12-07 57 views
1

我想只留下前綴(WST在下面的例子中)和數字。任何後綴和文件擴展名都應該被刪除。這應該讓我完全掌握產品代碼。使用ereg_replace或preg_replace在php中留下部分文件名

這裏有三種可能的值:

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

我需要爲這三個例子的輸出是:

39159 
22201 
WST 503 

這是我目前的ereg_replace,但它還會刪除號碼前的前綴:

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

停止使用`ereg_replace()`。已經過時了! – stillstanding 2010-12-07 11:13:37

+0

感謝您的信息。 – Andy 2010-12-07 11:16:43

回答

0

一個選項是刪除最後一位數字後的任何內容。如果你有在名稱中有多個號碼預期這可能無法正常工作:

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

另一個,可能是更強的選擇是之前捕捉到第一個數字,和任何東西:

preg_match("/^\D*\d+/", "WST 503.jpg", $matches); 
print_r($matches); // [0] => WST 503 
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); 

此代碼只工作正常如果前綴從來沒有以數字開頭,但。但你明白了。

+0

這會在我的例子中留下「FLAN」,「HAV」e.t.c嗎?我需要也刪除!所以它的前綴+號碼 – Andy 2010-12-07 11:21:22

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'); 
?> 

快速和骯髒的腳本;-)