如何用正则表达式匹配 400 到 550 之间的数字?

How to match numbers ranging from 400 to 550 with regex?

我想验证一个数字字符串,该字符串必须只包含范围从 400550 的数字。

$x = "401";  // valid 
$x = "551";  // invalid 

我只想匹配 400550 之间的数字。

我尝试了以下模式:

if(preg_match_all("/[400-550]+/",$x)); 

但是不行。

匹配数字 400-550 的正则表达式模式是什么?

只需组合 in_array() with range(),像这样:

if(!in_array($x, range(400, 550)))
   echo "in ";
echo "valid";

或者只做一个简单的 if 语句,例如

if($x >= 400 && $x <= 550)

试试这个:

 if(preg_match_all("/(4\d\d|5([0-4]\d|50))/",$x)) { ... }

测试:https://regex101.com/r/zU4vX8/2

应该有效:

^((4\d\d)|(5([0-4]\d|50)))$

验证此范围的正则表达式方式:

\b(?:4[0-9]{2}|5[0-4][0-9]|550)\b

参见demo。它也适用于较大的文本,因为使用了 \b 边界。在整个字符串的情况下,使用 ^$ 代替 \b.

除非您有使用正则表达式的理由,否则只需比较数字。

if ($x <= 550 && $x >= 400)

它比正则表达式或使用数组范围更快更易读。

尝试/(([4][0-9]{2,2})|([5][0-4][0-9])|(550))/ (我还没有测试过)。不知道有没有更简单的方法

php代码:

<?php
$subject = "550";
$pattern = '/4\d\d|5[0-4][0-9]|550/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>