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 |
像这样
1 2 3 4 5 6 7 |
如果你想得到真正的幻想,你可以把它投射成一个int-
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; } } |