php中如何将找到一个标志字符的下一个?

有个简单的需求,某个字段不能重复,弱重复提示输入该字符串加上编号的下一个字符串。

比如说系统里记录没有WC 时 不报重复可以插入,

插入后再输入WC 提示 有重复 请输入WC1 编号以后的数字。

WC1 插入后 再输入WC1 提示重复,请输入WC2  而不是 WC11。

开始我是这么写的

$exist = M('table')->where('code'=>$code)->order('code desc')->find();
if($exist){
  $current_num = intval($exist); //我期望 没数字是0 有数字返回末尾数字
  if($current_num !=0 ){
    $code = str_replace($current_num, '', $code); //这步是 当有数字的字符串输入进来,过滤字符串后以有数字
  }
  return $code.($current_num+1);
}else{
  return true;
}

结果 我错了, WC 第一次输入 :true

WC 第二次输入: WC1
WC1 第一次数组: WC11

后来我就调试 发现intval  不是干我那事的, WC1 intval 后返回0

php 手册上说intval 第一个参数是数量值!!!

Clipboard Image.png

其实对于这个问题还有方式是正则,but 我正则弱。

有没有好的办法??? 我记得有个什么filter系列 内置函数挺强大。查下手册

Clipboard Image.png

Clipboard Image.png

我就是试了试,真可行

附上tp5中的代码:

$exist = $model->where(['code'=>['like', "{$code}%"], 'type'=>$type])->order('code desc')->getField('code');
//注意 从字符串 WC1 中获取整数部分  不能用 (int) 和 intval('WC1') 那样返回的是0,里面传参只能是数量值
$current_num = filter_var($exist, FILTER_SANITIZE_NUMBER_INT);
if(!$current_num){
  return success("{$code}1");
}else{
  $code = str_replace($current_num, '', $code);
  return success($code . ($current_num + 1));
}

标签:<a href="/?tag=php">php</a>,<a href="/?tag=函数">函数</a>,<a href="/?tag=filter">filter</a>,<a href="/?tag=filter_var">filter_var</a>,<a href="/?tag=过滤">过滤</a>,<a href="/?tag=转换">转换</a>