关于正则表达式:PHP – 使用正则表达式检查给定范围内的字符串

PHP - Check if string in a given range using Regular expression

本问题已经有最佳答案,请猛点这里访问。

有没有办法用正则表达式检查d30500是否在d000000-d300000范围内?如果不是,最简单的方法是什么?

更新

很抱歉一开始没提到。范围可以类似于asd000-asd3000,检查asd1000是否在范围内,ch0000-ch50000,检查ch250是否在范围内。所以,任何数量的字母字符都可以出现在开头,我想知道是否有直接的regex比较来检查给定的代码是否在不拆分字符串的情况下具有范围。


1)如评论所述,我将使用数学的魔力

1
2
3
4
5
 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)你也可以做SUBSTR。

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

像这样

1
2
3
4
5
6
7
   $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)您也可以使用阵列进行校准。

1
2
3
4
5
6
7
8
9
10
11
<?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)更新答案。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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 !!!";
    }
?>


如果没有指定字母表,请尝试此操作

  • 范围0-300000:^[A-z]*([0-3][\d]{0,5})$。小提琴

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

如果你指定了字母表

  • 对于'ch'范围0-300000:^CH([0-3][\d]{0,5})$。小提琴


试试这个…

1
2
3
4
5
6
7
8
9
10
11
12
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;
   }
}