php正则表达式检查一个数字是否由5位数组成

时间:2009-07-30 06:44:22

标签: php regex

如何编写正则表达式来检查一个数字是否只包含5位数?

4 个答案:

答案 0 :(得分:19)

这个正则表达式应该很好用:

/^\d{5}$/

这将检查一个字符串是否只包含5个数字。

  • /是分隔符。它是正则表达式的开头和结尾。 (用户定义,您可以使用任何字符作为分隔符。)

  • ^是字符串锚点的开头。

  • \d[0-9]的简写,这是一个只匹配数字的字符类。

  • {5}表示重复最后一组或字符5次。

  • $是字符串锚点的结尾。

  • /是结算分隔符。


如果要确保该数字不是以0开头,则可以使用以下变体:

/^[1-9]\d{4}$/

其中:

  • /是分隔符。它是正则表达式的开头和结尾。 (用户定义,您可以使用任何字符作为分隔符。)

  • ^是字符串锚点的开头。

  • [1-9]是一个匹配数字的字符类,范围从19

  • \d[0-9]的简写,这是一个只匹配数字的字符类。

  • {4}表示重复最后一组或字符4次。

  • $是字符串锚点的结尾。

  • /是结算分隔符。


请注意,使用正则表达式进行此类验证远非理想。

答案 1 :(得分:14)

此正则表达式将确保该数字不以零开头:

if(preg_match('/^[1-9]\d{4}$/', $number))
    echo "Number is 5 digits\n";
else
    echo "Number is not five digits\n";

但为什么不使用is_numeric()呢?

if(is_numeric($number) && $number >= 10000 && $number <= 99999)
    echo "Number is 5 digits\n";
else
    echo "Number is not five digits\n";

或者您甚至可以将其强制转换为整数,以确保它只有一个整数值:

if(strval(intval($number)) === "$number" && $number >= 10000 && $number <= 99999)
    echo "Number is 5 digits\n";
else
    echo "Number is not five digits\n";

答案 2 :(得分:7)

试试这个:

^[0-9]{5}$

^$标记字符串的开头和结尾,[0-9]描述的字符必须重复5次。所以这只匹配5位数的数字(但它仍然可以是00000)。如果您只想允许10000到99999之间的数字:

^[1-9][0-9]{4}$

如果您想允许任何数字最多5位数(0到99999):

^(?:0|[1-9][0-9]{0,4})$

(?: expr )只是一个非捕获分组,用于零和其他数字之间的交替,前导数字非零

答案 3 :(得分:4)

虽然没有使用正则表达式,但希望更快:

$var = trim($var);

if(strlen($var) == 5 && ctype_digit($var))
{
//
}

编辑: 增加了修剪功能。这一点很重要!它删除空格,以便strlen()函数按预期工作。此外,它确保$ var是一个STRING。您需要将字符串传递给ctype_digit。如果你传递说,一个整数,它将返回false !!!