A-Z和0-9组合的增量,格式未知

时间:2015-03-13 08:59:39

标签: php regex preg-match

我有一张表来保存发票开始编号,这可以让用户以任何格式定义,例如:

ABC123

AZ2D20D7S99

但会强制用户以数字

结束

我有一张桌子用 auto_increment

保存所有创建的发票

现在,我需要用

显示发票号码

发票开始编号 +发票的 auto_increment ID

例如,我从db中选择了发票ID 11,发票编号应为

ABC134

AZ2D20D7S110

我认为可以使用preg_match和preg_replace但是起始编号没有标准格式,所以我猜它是不可能的,除非有标准格式,对吧?

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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+)$然后匹配必须位于字符串末尾的一个或多个十进制字符($
  • $matches[1]中存储第一个paranthesis内的匹配字符串

答案 2 :(得分:0)

使用自动增量可以在另一列中指定前缀,并使PK成为组合列索引。这样做的另一个好处是,您无需代码来维护它或查询和显示数据:http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html