如何使用 PHP 检查用户是否仅输入数字且长度至少为 4 个数字?
Mark Byers 的建议很好,但还有另一种方法:
$valid = ctype_digit($number) && strlen($number) >= 4;
您可以使用正则表达式:
/^\d{4,}$/
使用示例:
$s = "7325";
if (preg_match('/^\d{4,}$/', $s)) {
echo "matches";
}
<?php
function benchmark($callback){
echo sprintf('%-30s: ', $callback);
$t = microtime(true);
foreach(range(1, 10000) as $n){
call_user_func($callback);
}
echo (microtime(true)-$t)."\n";
}
function mark_byers_preg_match(){
$s = "7325";
preg_match('/^\d{4,}$/', $s);
}
function notjim_ctype_digit_strlen(){
$number = 7325;
ctype_digit($number) && strlen($number) >= 4;
}
function tomalak_intval_broken(){
$check = 7325;
intval($check) == $check && $check >= 1000 && $check <= 9999;
}
benchmark('mark_byers_preg_match');
benchmark('notjim_ctype_digit_strlen');
benchmark('tomalak_intval_broken');
?>
mark_byers_preg_match : 0.029040098190308
notjim_ctype_digit_strlen : 0.026585817337036
tomalak_intval_broken : 0.019872903823853
注意:@Tomalak 不适用于以
0
开头的数字,因此它不符合条件
编辑: @kiethjgrant 的解决方案已被删除,因为
intval(0000)
评估为 false
,而它应该是 true
。
您有可以开始使用的示例代码吗?
要严格回答您的问题,您可以使用像
if(preg_match('/^\d{4,}$/', $input)...
这样的正则表达式。
但是这里还有很多需要考虑的地方:您需要考虑验证和过滤(并且最好将两个问题分开)。 如果你严格检查整数,那么我想你不会受到 SQL 注入、XSS 等问题的影响,但你确实需要处理这些问题,因为迟早你需要过滤& 验证除简单整数之外的其他内容。
你应该始终使用最有效的方式来做到这一点
if ( is_numeric($imput) && isset($input[3]) )
{
// your code
}
isset() 是一种语言构造,它总是比 strlen() 更快。
isset($input[n-1]) 告诉你字符串(通过表单传递的数据始终是字符串)是否至少有 n 长。
is_numeric() 检查它是否是有效的数字字符串。
我认为它比 ctype_digit() && strlen() 更好。