PHP tamsayılar doğrulayarak

5 Cevap php

I was wondering, what would be the best way to validate an integer. I'd like this to work with strings as well, so I could to something like

(String) 00003 -> (int) 3 (geçerli)

(String) -027 -> (int) -27 (geçerli)

(Int) 33 -> (int) 33 (geçerli)

(String) '33a '-> (YANLIŞ) (geçersiz)

Ben şimdiye kadar gitmek ettik budur:

function parseInt($int){
    //If $int already is integer, return it
    if(is_int($int)){return $int;}
//If not, convert it to string
$int=(string)$int;
//If we have '+' or '-' at the beginning of the string, remove them
$validate = ($int[0] === '-' || $int[0] === '+')?substr($int, 1):$int;
//If $validate matches pattern 0-9 convert $int to integer and return it
//otherwise return false
return preg_match('/^[0-9]+$/', $validate)?(int)$int:FALSE;
}

Bildiğim kadarıyla test gibi, bu fonksiyon çalışır, ancak beceriksiz bir çözüm gibi görünüyor.

Fonksiyonunun bu tür yazmak için daha iyi bir yolu var mı. Ben de denedim

filter_var($foo, FILTER_VALIDATE_INT);

ama ',' '0003 gibi değerleri kabul olmaz -0 'vb

5 Cevap

Sen try ctype_digit veya is_numeric olabilir

adında bir yerli işlevi vardır intval(). Eğer bu sizin için aradığınızı Neler mi?

Jacob da anlaşılacağı gibi intval kullanabilirsiniz.

Bir Yerel farkında int doğrulama sınıfı istiyorsanız Ancak, o zaman ben Zend Framework 's Zend_Validate_Int doğrulayıcı kullanmanızı öneririz.

Usage

<?php
$v = new Zend_Validate_Int();
if ($v->isValid($myVal)) {
    // yay
} else {
    // fail
}

Çünkü Zend Framework pick-and-tercih yapısı, size tüm uygulama için bu kullanmak gerekmez unutmayın. Doğrulayıcıları yerel farkında doğrulama için, Zend_Locale üzerinde minimum bağımlılıkları var ve Zend_Registry.

Hızlı ve kirli yol, bildiğim kadarıyla '0003 'idare olmaz.

function parseInt($in) {
    return ($in == intval($in) ? $in : false);
}

Ayrıca PEAR'ın doğrulama paketi kullanabilirsiniz; http://pear.php.net/manual/en/package.validate.validate.number.php

Çeşitli seçenek:

  1. ondalık (karışık) - Ondalık karakter veya ondalık izin false. Örneğin, ",." hem izin vermek için "." ve ",".
  2. dec_prec (int) - izin verilen ondalık sayısı.
  3. dk (float) - Minimum değer.
  4. max (float) - maksimum değer.