如何编写正则表达式来检查一个数字是否只包含5位数?
答案 0 :(得分:19)
这个正则表达式应该很好用:
/^\d{5}$/
这将检查一个字符串是否只包含5个数字。
/
是分隔符。它是正则表达式的开头和结尾。 (用户定义,您可以使用任何字符作为分隔符。)
^
是字符串锚点的开头。
\d
是[0-9]
的简写,这是一个只匹配数字的字符类。
{5}
表示重复最后一组或字符5
次。
$
是字符串锚点的结尾。
/
是结算分隔符。
如果要确保该数字不是以0开头,则可以使用以下变体:
/^[1-9]\d{4}$/
其中:
/
是分隔符。它是正则表达式的开头和结尾。 (用户定义,您可以使用任何字符作为分隔符。)
^
是字符串锚点的开头。
[1-9]
是一个匹配数字的字符类,范围从1
到9
。
\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 !!!