Как я могу проверить, является ли ввод формы числовым в PHP?

StackOverflow https://stackoverflow.com/questions/317916

  •  11-07-2019
  •  | 
  •  

Вопрос

Мне нужно иметь возможность увидеть, является ли ввод формы в PHP числовым. Если он не числовой, сайт должен перенаправить. Я пытался is_numeric (), но он не работает.

Примеры кода будут хорошими.

Я разрабатываю корзину для покупок, которая принимает целочисленное значение для количества. Я пытаюсь это:

if(!is_numeric($quantity)){
                //redirect($data['referurl']."/badinput");
                echo "is not numeric";
        }
Это было полезно?

Решение

if(!is_numeric($quantity == 0)){
                //redirect($data['referurl']."/badinput");
                echo "is not numeric";

Здесь у вас есть два вложенных условия. Допустим, $ количество равно 1.

Первое условие оценивает 1 == 0 и возвращает FALSE. Второе условие проверяет, является ли FALSE числовым, и возвращает FALSE, потому что FALSE не является числовым.

просто напишите:

if (!is_numeric($quantity))
{
    echo 'is not numeric';
}

Другие советы

Вероятно, вам следует объяснить, что вы подразумеваете под "числовым" - интеграл, с плавающей запятой, экспоненциальная запись и т. д.? is_numeric () примет все это.

Если вы хотите проверить, что строка не содержит ничего, кроме цифр, вы можете использовать регулярное выражение, например.

/^\d+$/

Если вы собираетесь использовать фактическое значение, как если бы оно было целым числом, вы, вероятно, захотите передать его через в любом случае intval () , который вернет 0 , если значение не может быть проанализировано - если 0 является допустимым значением, тогда вам, вероятно, придется каким-то образом обрабатывать это, возможно, ограничивая нижний диапазон значения.

Также может быть целесообразно выполнить некоторую проверку ввода на стороне клиента с помощью JavaScript.

Обратный путь к серверу и обратно - длительный процесс, который может привести к опечатке, и вы уменьшите нагрузку на сервер, сделав клиентский браузер заранее с некоторой гарантией качества.

Проверьте is_int и is_numeric . В каждой из ссылок есть примеры. Если вам нужна дополнительная помощь, я опубликую данные, с которыми у вас возникли проблемы, и пример кода.

РЕДАКТИРОВАТЬ:

$quantity == 0

всегда будет числовым, поскольку будет возвращать логическое значение (1 или 0). Как правильно это сделать:

if ( is_numeric( $quantity ) ) {
...
}

или

if ( is_int( $quantity ) ) {
...
}

Другой альтернативой является ctype_digit . Из документов:

Checks if all of the characters in the provided string, text, are numerical. Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise.

<?php
$strings = array('1820.20', '10002', 'wsl!12');
foreach ($strings as $testcase) {
    if (ctype_digit($testcase)) {
        echo "The string $testcase consists of all digits.\n";
    } else {
        echo "The string $testcase does not consist of all digits.\n";
    }
}
?>
  

Приведенный выше пример выдаст:
  Строка 1820.20 не состоит   всех цифр.
  Строка 10002 состоит из всех цифр.
     Строка wsl! 12 не состоит из всех цифр.

<?php

$numeric_string = '42';
$integer        = 42;

ctype_digit($numeric_string);  // true
ctype_digit($integer);         // false (ASCII 42 is the * character)

is_numeric($numeric_string);   // true
is_numeric($integer);          // true
?>

Что сказал Роб, хотя вместо регулярных выражений для проверки на цифры я бы использовал ctype_digit

у Таркуна пока лучший ответ. Если вы задаете такой вопрос, я думаю, что вы пока не хотите начинать возиться с reg-exp.

Переосмыслите свою логику. Почему вы хотите проверить, является ли $ amount == 0 числовым результатом? Если вы пытаетесь избежать ошибок, так как считаете, что количество может не иметь назначенного значения, вы немного опоздали. Это очень распространенная (и гнусная) дыра в безопасности в вашем приложении - если $ amount имеет значение, полученное вообще из пользовательского ввода, пожалуйста, обязательно очистите входные данные до того, как они достигнут этой точки выполнения. Как небольшая часть проблемы, вам не нужно будет назначать значение по умолчанию, потому что вы дезинфицировали свой ввод ранее (и эта дезинфекция - то, где вы столкнулись бы с ситуацией «без ввода»).

Удачи!

Используйте регулярные выражения: / ^ \ d + $ / должно решить проблему

Попробуйте это:

$numeric = "1"; //true default

$string = trim(

Попробуйте это:

<*>GET['string']); $chkarray = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ",", "."); for ($i=0; $i < strlen($string); $i++) { if (!in_array(substr($string, $i, 1), $chkarray)) { $numeric = "0"; break; } }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top