$st = 'DH20070121-00001';if(eregi('^DH([1-9][0-9]{7})-[0-9]{5}$', $st))
{
echo 'OK';
}
else
{
echo 'NO';
}

解决方案 »

  1.   

    print ereg("^DH[0-9]{8}-[0-9]{5}$","DH20070121-00001");成功返回1,失败返回0
      

  2.   

    $st = 'DH20070121-00001';eregi('^DH([0-9]{8})-([0]{0,4})[1]([0-9]{0,4})', $st)
    试一试。
      

  3.   

    我就是想实现smarty里的函数一样
      

  4.   

    楼主,还是没弄明白你的意思:
    既然有PHP函数,干吗还要搞出个规则?你的意图是什么,说明白了我们才好帮你。
      

  5.   

    是这样,我准备在数据库中定义几个编码规则,比如订单的编码规则,由用户自己定义,我们给用户一些类似函数一样的规则方式,供用户进行定义,如果订单的编码规则定义为DH{date(Ymd)}-{number(5,1)},则程序中根据用户定义的规则,生成的编码为:DH20070121-00001,这则表达式的意思如下:
    {date(Ymd)}:表示调用PHP的date函数,并用年月日表示出来
    {number(5,1)}:表示一个数字,长度为5位,起始号码为1,如00001或01234当然,这个number(5,1)以后会根据记录的增加进行递增。
      

  6.   

    模板化然后repalce最后使用eval直接执行此部分代码即可:
    $str="\$val='DH'.date(Ymd);";
    eval($str);
    print $val;
      

  7.   

    function number($param) {
      list($len, $start) = split(',', $param);
      return str_pad($start, $len, '0', STR_PAD_LEFT);
    }$p = 'DH{date(Ymd)}-{number(5,1)}';echo preg_replace("/{(\w+)\((.+?)\)}/e", "$1('$2')", $p);