未知格式的 A-Z 和 0-9 组合的增量
Increment for combination of A-Z and 0-9 with unknown format
我得到了一个table来保存发票起始编号,它可以让用户以任何格式定义,例如:
ABC123
AZ2D20D7S99
但会强制用户以数字
结束
我得到一个 table 来保存所有创建的发票 auto_increment
所以现在,我需要用
显示发票号
发票起始编号 + auto_increment发票编号
例如,我从数据库中选择了发票 ID 11,发票编号应该是
ABC134
AZ2D20D7S110
我以为可以用preg_match和preg_replace,但是起始号码没有标准格式,所以我想除非有标准格式,否则不可能吧?
您说您强制用户以数字结尾,因此这是您可以在 RegEx 中使用的某种标准格式。
$regs = array();
$data="AZ2D20D7S110";
preg_match('/(.*?)(\d*\z)/', $data, $regs);
// use $regs[1] for matched number, increment it and append it $regs[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]
中存储第一个括号内的匹配字符串
使用自动增量,可以在另一列中指定前缀,并使 PK 成为组合列索引。这有一个额外的好处,您不需要代码来维护它或查询和显示数据:http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
我得到了一个table来保存发票起始编号,它可以让用户以任何格式定义,例如:
ABC123
AZ2D20D7S99
但会强制用户以数字
结束我得到一个 table 来保存所有创建的发票 auto_increment
所以现在,我需要用
显示发票号发票起始编号 + auto_increment发票编号
例如,我从数据库中选择了发票 ID 11,发票编号应该是
ABC134
AZ2D20D7S110
我以为可以用preg_match和preg_replace,但是起始号码没有标准格式,所以我想除非有标准格式,否则不可能吧?
您说您强制用户以数字结尾,因此这是您可以在 RegEx 中使用的某种标准格式。
$regs = array();
$data="AZ2D20D7S110";
preg_match('/(.*?)(\d*\z)/', $data, $regs);
// use $regs[1] for matched number, increment it and append it $regs[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]
中存储第一个括号内的匹配字符串
使用自动增量,可以在另一列中指定前缀,并使 PK 成为组合列索引。这有一个额外的好处,您不需要代码来维护它或查询和显示数据:http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html