PHP验证问题

时间:2010-04-08 20:49:02

标签: php

我如何检查并查看用户是否仅使用PHP输入数字且至少4个数字?

5 个答案:

答案 0 :(得分:6)

Mark Byers的建议很好,但这是另一种方式:

$valid = ctype_digit($number) && strlen($number) >= 4;

答案 1 :(得分:5)

您可以使用正则表达式:

/^\d{4,}$/

使用示例:

$s = "7325";
if (preg_match('/^\d{4,}$/', $s)) {
    echo "matches";
}

答案 2 :(得分:1)

ctype_digit()&& strlen()获胜

<?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's不适用于以0开头的数字,因此不符合条件


修改:@ kiethjgrant的解决方案已被删除,因为intval(0000)的评估结果为false时应为true

答案 3 :(得分:0)

您是否有任何示例代码可以开始?

要严格回答您的问题,您可以使用if(preg_match('/^\d{4,}$/', $input)...等正则表达式。

但是这里需要考虑的还有很多:你需要考虑验证和过滤(你最好保留两个不同的问题)。如果你正在严格检查一个整数,那么我认为你是安全的SQL注入,XSS等,但你真的需要处理这些问题,因为你迟早需要过滤&安培;验证除简单整数之外的其他内容。

答案 4 :(得分:0)

你应该始终使用最有效的方式来做到这一点

if ( is_numeric($imput) && isset($input[3]) )
{
  // your code
}

isset()是一种语言结构,总是比strlen()快。

isset($ input [n-1])告诉您字符串(通过表单的数据总是字符串)是否至少有n长。

is_numeric()检查它是否是有效的num字符串。

我认为它比ctype_digit()&amp;&amp;更好strlen的()。