PHP doğrulama soru

5 Cevap

Bir kullanıcı sadece sayıları girer ve en az 4 sayı uzunluğunda PHP kullanarak olup olmadığını nasıl kontrol ve görüyorsunuz?

5 Cevap

Bir düzenli ifadeyi kullanabilirsiniz:

/^\d{4,}$/

Örnek kullanım:

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

Mark Byers 'öneri iyidir, ama burada başka bir yolu var:

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

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 en @ sayılar 0 ile başlayan çalışmıyor bu yüzden hak değildir


intval(0000) o true olmalıdır, false olarak değerlendirildiğinden, Edit: @ kiethjgrant çözeltisi uzaklaştırılmıştır.

Başlamak için herhangi bir örnek kod var mı?

Kesinlikle sizin sorunuzu yanıtlamak için, if(preg_match('/^\d{4,}$/', $input)... gibi bir regex kullanabilirsiniz.

Ama burada dikkat etmeniz gereken bir şey daha var: Eğer doğrulama ve filtreleme hem de dikkate almak gerekir (ve iki ayrı sorunları tutmak için en iyi konum). Eğer kesinlikle bir tamsayı için kontrol ediyorsanız, o zaman, vb SQL enjeksiyon, XSS, güvenli konum varsayalım, ama er ya da geç filtrelemek için ihtiyacımız olacak, çünkü gerçekten, bu konularda bir kolu olması gerekir & Basit bir tamsayı dışında bir şey doğrulamak.

Her zaman bunu yapmak için en verimli şekilde kullanmak gerekir

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

isset () her zaman strlen daha hızlı bir dil oluşumu, (olan).

isset ($ girdi [n-1]) string (şeklinde geçer veriler her zaman string) en az n uzun olup olmadığını söyler.

is_numeric () geçerli bir num dizedir denetler.

i ctype_digit daha iyi olduğunu düşünüyorum () && strlen ().