PHP: Cel mai bun mod de a verifica dacă intrarea este un număr valid? (Programare, Php, Intrare, Validare, Numeric)

medusa141414 a intrebat.

Care este cel mai bun mod de a verifica dacă intrarea este numerică?

  • 1-
  • +111+
  • 5xf
  • 0xf

Aceste tipuri de numere nu ar trebui să fie valide. Numai numere de genul: 123, 012 (12), numere pozitive ar trebui să fie valabile.Acesta este codul meu actual:

$num = (int) $val;
if (
    preg_match('/^d+$/', $num)
    &&
    strval(intval($num)) == strval($num)
    )
{
    return true;
}
else
{
    return false;
}

Comentarii

  • nu faceți (int) pe prima linie a codului dvs.! transformați-l în (string), apoi lucrați cu șiruri de caractere cu ctype_digit($num) va fi mai bine decât int(proff în manual). php.net/ctype_digit) !!! –  > Por Vladimir Ch.
6 răspunsuri
user1479055

ctype_digit a fost construit tocmai în acest scop.

Comentarii

  • pentru că în prima linie este $num = (int) $val; dacă se transformă în șir de caractere, $num = (string) $val; va fi ok, așa cum este scris în manual !!!! –  > Por Vladimir Ch.
Mathieu Dumoulin

Eu folosesc

if(is_numeric($value) && $value > 0 && $value == round($value, 0)){

pentru a valida dacă o valoare este numerică, pozitivă și integrală

http://php.net/is_numeric

Nu prea îmi place ctype_digit, deoarece nu este la fel de ușor de citit ca „is_numeric” și, de fapt, are mai puține defecte atunci când vrei cu adevărat să validezi că o valoare este numerică.

Comentarii

  • cu excepția faptului că OP caută doar numere întregi pozitive, nu numere. –  > Por rdlowrey.
John Conde

filter_var()

$options = array(
    'options' => array('min_range' => 0)
);

if (filter_var($int, FILTER_VALIDATE_INT, $options) !== FALSE) {
 // you're good
}

Comentarii

  • +1 Deoarece aceasta este o soluție mai semantică (deși mai stufoasă) decât ctype_digit –  > Por rdlowrey.
rdlowrey
return ctype_digit($num) && (int) $num > 0

MD. Shafayatul Haque

Pentru PHP versiunea 4 sau versiunile ulterioare:

<?PHP
$input = 4;
if(is_numeric($input)){  // return **TRUE** if it is numeric
    echo "The input is numeric";
}else{
    echo "The input is not numeric";
}
?>

Kareem

Cea mai sigură cale

if(preg_replace('/^(-){0,1}[0-9]+(.[0-9]+){0,1}/', '', $value) == ""){
  //if all made of numbers "-" or ".", then yes is number;
}

Comentarii

  • Acest lucru nu funcționează, de exemplu, exemplul lui OP de „1-” nu ar trebui să fie considerat un număr valid, dar în conformitate cu acest regex este. –  > Por rowatt.
  • @rowatt – este pentru numere negative. Am schimbat-o pentru a ține cont doar de „-” la început…  > Por Kareem.