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