开发者

PHP validation question

How do I check and see if a user enters only numbers and is at least 4 numbers long 开发者_如何学JAVAusing PHP?


Mark Byers' suggestion is good, but here's another way:

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


You could use a regular expression:

/^\d{4,}$/

Example usage:

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


ctype_digit() && strlen() wins

<?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');

?>

results

mark_byers_preg_match         : 0.029040098190308
notjim_ctype_digit_strlen     : 0.026585817337036
tomalak_intval_broken         : 0.019872903823853

Note: @Tomalak's does not work with numbers starting with 0 so it does not qualify


Edit: @kiethjgrant's solution was removed because intval(0000) evaluates as false when it should be true.


Do you have any example code to start with?

To strictly answer your question, you could use a regex like if(preg_match('/^\d{4,}$/', $input)....

But there's a lot more to consider here: you need to consider both validation and filtering (and you're best to keep the two separate issues). If you're strictly checking for an integer, then I suppose you're safe from SQL injection, XSS, etc., but you really need to have a handle on those issues, because sooner or later you're going to need to filter & validate something other than a simple integer.


you should always use the most efficient way to do it

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

isset() is a language construct, which is always faster than strlen().

isset($input[n-1]) tells you whether string(data which passes through form is always string) has at least n long.

is_numeric() checks it is a valid num string.

i think it is better than ctype_digit() && strlen().

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜