我在一个页面上工作,用户将看到一个使用带有一组数据的数据表的表。 他们需要选择自己的编号,可以只是数字或字母数字以及增量。
因此它将有两个输入,一个用于起始编号,可以是他们想要的任何东西:
1
,A01
,01
,A01M
,列表继续。所以组合可能是无止境的。
然后列表继续,现在棘手的一点是增量。用户需要选择将增量设置为任何数字,因为它可能在末尾有不应该更改的字符,$n++
增加字母数字字符串在这里不起作用。
我一直在谷歌搜索,但我发现的只有特定情况或使用++
进行自动增量。
任何帮助都会很棒。
答案 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+/'