PHP - 使用正则表达式检查给定范围内的字符串

时间:2017-07-13 03:36:53

标签: php regex

有没有办法使用正则表达式检查D30500是否在D000000 - D300000范围内。如果不是最简单的方法呢?

更新

很抱歉在开始时没有提及。范围可以像ASD000 - ASD3000并检查ASD1000是否在CH0000 - CH50000范围内并检查CH250是否在该范围内。因此,开头可以有任意数量的字母字符,我想知道是否有直接的正则表达式比较来检查给定的代码是否在不分割字符串的情况下使用范围。

3 个答案:

答案 0 :(得分:1)

1)评论中陈述的我将使用数学的魔力

 if(preg_match( '/^D([0-9]+)/', 'D30500', $match )){
     if( $match[1] < 300000 ){  //$match[1] = '30500';
        //do something
     } 
 }

对于Regx https://regex101.com/r/KppvPh/1

2)你也可以做subtr

 $number = substr('D30500', 1 ); //= 30500

比如这个

   $check = substr("D30500" ,1);
   $start = substr("D000000" ,1);
   $end =  substr("D300000" ,1);

  if( $check > $start && $check < $end ){
         //bla bla ( inclusive? )
  }

如果你想得到真正的幻想,你可以把它作为一个int $start = intval(substr("D000000" ,1));

3)你也可以使用数组做到这一点。

<?php
    $from = 'D101';
    $to = 'D105';

    array_walk(range(substr($from,1),substr($to,1)), function ($v, $k) {
        $search = 'D105';
        if($v==substr($search,1)){
            echo "Yes !!!";
        } 
    });
?>

4)更新了答案。

<?php
    // 2)
    $from = 'ASD000';
    $to = 'ASD3000';
    $search = 'ASD3000';

    preg_match_all('!\d+!', $from, $matches);
    $from_int = $matches[0][0];
    preg_match_all('!\d+!', $to, $matches);
    $to_int = $matches[0][0];
    preg_match_all('!\d+!', $search, $matches);
    $search_int = $matches[0][0];

    if( $search_int > $from_int && $search_int < $to_int ){
        echo "Yes !!!";
    }
?>

答案 1 :(得分:0)

试试这个..

preg_match('/[A-z]([\d]+)/', "DBB30500" ,$matches1);
preg_match('/[A-z]([\d]+)/', "DXXX000000" ,$matches2);
preg_match('/[A-z]([\d]+)/', "DCHDH300000" ,$matches3);

if(!empty($matches1)){
   $numberToCheck = $matches1[1];
   $numberFirstParameter = $matches2[1];
   $numberSecondParameter = $matches3[1];
   if($numberToCheck >= $numberFirstParameter && $numberToCheck <= $numberSecondParameter){
      echo $numberToCheck.' is within '.$numberFirstParameter.' and '.$numberSecondParameter;
   }
}

答案 2 :(得分:0)

如果没有指定字母

,请尝试此操作
  • 范围0-300000:^[A-z]*([0-3][\d]{0,5})$ fiddle

  • 范围0-2000:^[A-z]*([0-2][\d]{0,3})$

如果指定字母

  • 代表'CH'范围0-300000:^CH([0-3][\d]{0,5})$ fiddle