PHP中的增量字符串

PHP中的增量字符串,php,Php,我想要递增数字的字符串格式。我有以字母开头的字符串,其中包含的数字前面很少有0 $string = M001; //input $alf= trim(str_replace(range(0,9),'',$string)); //removes number from string $number = preg_replace('/[A-Za-z]+/', '', $string);// removes alphabets from the string $number+=1; $custo

我想要递增数字的字符串格式。我有以字母开头的字符串,其中包含的数字前面很少有0

$string = M001;  //input
$alf= trim(str_replace(range(0,9),'',$string)); //removes number from string 
$number = preg_replace('/[A-Za-z]+/', '', $string);// removes alphabets from the string 
$number+=1;
$custom_inv_id = $alf.$number;
预期结果:

input M002 output M003
input A00003 output A00004

使用上面的代码,如果输入是M002,我得到的输出是M3。我怎样才能得到M003?0的数量不是固定的。

您可以使用
sprintf
preg\u match
函数来获得预期的结果

  • 首先:使用
    preg\u match
    将字符串拆分为单独的值以进行处理
  • 第二:使用
    sprintf

$a='m002';
$pattern='#(?P[A-Za-z0]+)(?P[1-9]+)#';
预匹配($pattern,$a,$matches);
$final=$matches['word'](字符串)($matches['digtt']+1);
echo$final;

使用PHP
preg\u match
str\u replace
并尝试以下代码:-

$str='M001';   
preg_match('!\d+!', $str, $matches);
$num=(int)$matches[0];
$num++;

echo str_replace((int)$matches[0],'',$str);
echo $num;

我希望这能对您有所帮助。我做了一些动态的东西,使M%也动态

<?php
$vl = "A00004";
$number =  substr($vl ,1);
$num= substr_count($vl,0);
$num++;
$number++;
$string = "M%'. 0".$num."d";

echo sprintf($string, $number); 

?>

由于前导0被复制,我将这样做。如果前导字符也是小写的,它就可以工作。它也是一种非正则表达式和非数组方式

$str = "M0099";
$num = ltrim($str, "a..zA..Z0");
$new = str_replace($num, $num + 1, $str);
输出:

echo $new; // string(6) "M00100"

$custom\u inv\u id=$alf.sprintf('%03d',$number)。。。。您必须计算出您希望从$string的长度中得到多少个0-$alf的长度您希望M009是M0010还是M010???@Surace:应该是M0010。但是当您到达“M999”并尝试递增时,您希望发生什么?@MarkBaker:数字中的前导0应该按原样复制。之后,数字应该是递增的。你需要调整
.03
字符串或使其成为动态的,或者我是否错过了他希望每个案例都有一个函数“?@ins0:我应该使用什么来代替。03如果字符串如Surace所述是动态的,你能解释一下你的解决方案吗,这样对其他人更有用?请阅读-“简洁是可以接受的,但更全面的解释更好。“如果你想保留所有前导零,我刚刚更新了一个简单的解决方案,用一整套可能的测试再次更新它。@MaxZuber-正如OP的问题所说的字符串后跟数字,而
'B2BA5'
不遵循这种模式,为什么解决方案要考虑它呢?”?
<?php
$vl = "A00004";
$number =  substr($vl ,1);
$num= substr_count($vl,0);
$num++;
$number++;
$string = "M%'. 0".$num."d";

echo sprintf($string, $number); 

?>
M00005
$str = "M0099";
$num = ltrim($str, "a..zA..Z0");
$new = str_replace($num, $num + 1, $str);
echo $new; // string(6) "M00100"