php正则表达式,用于检查数字是否由5位数字组成

php正则表达式,用于检查数字是否由5位数字组成,php,regex,Php,Regex,如何编写正则表达式来检查数字是否仅由5位数字组成?此正则表达式应能很好地工作: /^\d{5}$/ 这将检查字符串是否仅由5个数字组成 /是分隔符。它位于正则表达式的开头和结尾。(用户定义,可以使用任何字符作为分隔符) ^是字符串锚点的开始 \d是[0-9]的缩写,它是一个仅匹配数字的字符类 {5}表示重复最后一组或字符5次 $是字符串锚点的结尾 /是结束分隔符 如果要确保数字不以0开头,可以使用以下变量: /^[1-9]\d{4}$/ 其中: /是分隔符。它位于正则表达式的开头和结

如何编写正则表达式来检查数字是否仅由5位数字组成?

此正则表达式应能很好地工作:

/^\d{5}$/
这将检查字符串是否仅由5个数字组成

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

  • ^
    是字符串锚点的开始

  • \d
    [0-9]
    的缩写,它是一个仅匹配数字的字符类

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

  • $
    是字符串锚点的结尾

  • /
    是结束分隔符


如果要确保数字不以0开头,可以使用以下变量:

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

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

  • ^
    是字符串锚点的开始

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

  • \d
    [0-9]
    的缩写,它是一个仅匹配数字的字符类

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

  • $
    是字符串锚点的结尾

  • /
    是结束分隔符


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

尝试以下方法:

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

^[1-9][0-9]{4}$
^(?:0|[1-9][0-9]{0,4})$
如果您想允许最多5位数字(0到99999)的任何数字:


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

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

if(preg_match('/^[1-9]\d{4}$/', $number))
    echo "Number is 5 digits\n";
else
    echo "Number is not five digits\n";
但为什么不改用呢


如果(是数值($number)&&&$number>=10000&&$number=10000&&$number虽然不使用regexp,但希望更快:

$var = trim($var);

if(strlen($var) == 5 && ctype_digit($var))
{
//
}
编辑:
添加了trim函数。这很重要!它删除了空格,以便strlen()函数按预期工作。它还确保$var是字符串。您需要将字符串传递给ctype_digit。如果传递的是一个整数,它将返回false!!!

@rezzif:但是
是数字('10001asdfasdf'))
返回
false
。我发现非正则表达式解决方案的唯一问题是使用
10003.20
这样的数字。它仍然有效。@andrew moore yeah,因此我删除了我的评论:P时间太晚了。我取消了我的否定投票。我不确定正则表达式为什么讨厌它。另一种方法似乎不必要地冗长。@rezzif:Regex远远不是问题的最佳解决方案。我使用Regex发布了我的答案,因为最初的海报要求基于Regex的解决方案,但我个人在代码中使用了太多php的方式。事实上,我创建了一个
is_numeric_int()
我的框架中的函数正是出于这个原因。根据使用情况(不清楚),正则表达式(或任何其他形式的字符串匹配)可能会更干净。例如,您的解决方案会说00123无效,0012345有效。不过我不会投反对票…)@roe:谢谢提示。我从未在PHP中实现过“123”==“0000123”。由于我对太多的PHP响应也发表了评论,所以如果它应该是一个五位数的字符串(而不是五位数,在寻找固定数字计数时,这种情况实际上很少出现),那么用例就不清楚了,字符串匹配显然更可取,因为使用数字进行了相当广泛的解析。不过,并不是说正则表达式一定是最好的,只是说数字解析可能不会更好。考虑到我的两个非正则表达式版本都更长,并且不能防止所有可能的输入,我建议正则表达式解决方案更简单、更容易。@太多php:
strval(intval($number))==“$number”
确实可以防止所有可能的输入(提示,注意
==
)。@Andrew Moore:是的,我最终用“===”解决了这个问题,但很难做到正确,我认为最好只使用正则表达式。您的正则表达式允许字符串带有最后的换行符,例如
“12345\n”
。确保使用
D
修饰符。
if(strval(intval($number)) === "$number" && $number >= 10000 && $number <= 99999)
    echo "Number is 5 digits\n";
else
    echo "Number is not five digits\n";
$var = trim($var);

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