2015-03-13 50 views
0

我得到一個表來保存發票開始數,其可以讓用戶在任何格式,例如定義:增量爲AZ的組合和0-9具有未知格式

ABC123

AZ2D20D7S99

但將迫使以數字

用戶端我有一個表來保存所有創建的發票與AUTO_INCREMENT

所以現在,我需要

發票開始數 +的AUTO_INCREMENT ID發票

例如i從分貝選擇發票ID 11的顯示發票號,發票數應該是

ABC134

AZ2D20D7S110

我認爲可以使用的preg_match的d preg_replace,但沒有標準格式的開始號碼,所以我想它是不可能的,除非有標準格式,對不對?

回答

0

你說你強制用戶以結尾的號碼是,所以這是某種標準格式,你可以在RegEx中使用。

$regs = array(); 
$data="AZ2D20D7S110"; 
preg_match('/(.*?)(\d*\z)/', $data, $regs); 
// use $regs[1] for matched number, increment it and append it $regs[0] 
0

我會用preg_match獲得尾隨號碼,preg_replace以用新的號碼替換:

$autoId = 11; /* this is the auto id from the database */ 
$id = "ABC134"; /* this is the user input */ 

/* find the trailing number and store it in $number */ 
preg_match("/[^\d]+(\d+)$/", $id, $matches); 
$number = $matches[1]; 

/* increase the number by the database id */ 
$newNumber = $number + $autoId; 

/* replace the old number with the new number */ 
echo preg_replace("/\d+$/", $newNumber, $id); 

/解釋模式的[^\d]+(\d+)$/

  • [^\d]+匹配一個或更多非十進制字符
  • (\d+)$然後匹配o具有NE或多個十進制字符是在所述字符串的末尾在$matches[1]$
  • 第一paranthesis內的匹配的字符串被存儲
+0

這是可以的案件ABC134,但AZ2D20D7S99將轉換爲AZ2D20D7S121,這是錯誤的 – user259752 2015-03-13 09:42:16

+0

不,結果是正確的對於AZ2D20D7S99,我只是測試它。 – 2015-03-13 09:48:09

+0

奇怪的是,我測試了它,它打印AZ2D20D7S121 – user259752 2015-03-13 09:49:44