PHP增量字母数字字符串

时间:2014-08-14 11:51:52

标签: php sql-server string increment alphanumeric

我在一个页面上工作,用户将看到一个使用带有一组数据的数据表的表。 他们需要选择自己的编号,可以只是数字或字母数字以及增量。

因此它将有两个输入,一个用于起始编号,可以是他们想要的任何东西: 1A0101A01M,列表继续。所以组合可能是无止境的。

然后列表继续,现在棘手的一点是增量。用户需要选择将增量设置为任何数字,因为它可能在末尾有不应该更改的字符,$n++增加字母数字字符串在这里不起作用。

我一直在谷歌搜索,但我发现的只有特定情况或使用++进行自动增量。

任何帮助都会很棒。

3 个答案:

答案 0 :(得分:1)

在PHP中,您可以使用preg_replace_callback()

function increment($string)
{
   return preg_replace_callback('/^([^0-9]*)([0-9]+)([^0-9]*)$/', function($m)
   {
      return $m[1].str_pad($m[2]+1, strlen($m[2]), '0', STR_PAD_LEFT).$m[3];
   }, $string);
}
需要

str_pad(),因为我们可能有前导零,如果谈到字符串,这是很重要的。一些例子:

var_dump(increment('2000000000'));//string(10) "2000000001"
var_dump(increment('A040'));      //string(4) "A041"
var_dump(increment('A15MM'));     //string(5) "A16MM"
var_dump(increment('PY999LKD'));  //string(9) "PY1000LKD" 

请注意,此功能会使不明确的情况不受影响:

var_dump(increment('N008P91F'));  //string(8) "N008P91F"

答案 1 :(得分:1)

如果您不区分大小写,则可以使用base_convert($string, 36,10)。这会将字符串转换为int(将字符串视为基数为36的数字)。

$var = base_convert('azz',36,10);
echo base_convert($var,10,36).PHP_EOL; $var+=1;
echo base_convert($var,10,36).PHP_EOL; $var+=1;
echo base_convert($var,10,36).PHP_EOL;

会给你:

azz
b00
b01

但请注意,6个字符已经为您提供了36 ^ 6-1~2亿个可能性,这大约是一个简单的整数的价值!

答案 2 :(得分:0)

这个正则表达式也可以正常工作'/\d+/'