Как я могу проверить, является ли ввод формы числовым в PHP?
Мне нужно уметь видеть, является ли ввод формы в PHP числовой. Если он не является числовым, веб-сайт должен перенаправляться. Я попытался is_numeric(), но он не работает.
Примеры кода будут приятными.
Я разрабатываю корзину покупок, которая принимает целочисленное значение для количества. Я пробую это:
if(!is_numeric($quantity)){
//redirect($data['referurl']."/badinput");
echo "is not numeric";
}
Ответы
Ответ 1
if(!is_numeric($quantity == 0)){
//redirect($data['referurl']."/badinput");
echo "is not numeric";
У вас есть два вложенных условия.
Пусть say $количество равно 1.
Первое условие оценивает 1 == 0 и возвращает FALSE.
Второе условие проверяет, является ли FALSE числовым и возвращает FALSE, потому что FALSE не является числовым.
просто напишите:
if (!is_numeric($quantity))
{
echo 'is not numeric';
}
Ответ 2
Вероятно, вы должны объяснить, что вы подразумеваете под "числовой" - интегральной, с плавающей точкой, экспоненциальной нотации и т.д.? is_numeric()
примет все это.
Если вы хотите проверить, что строка содержит ничего, кроме цифр, вы можете использовать регулярное выражение, например.
/^\d+$/
Если вы собираетесь использовать фактическое значение, как если бы оно было целым числом, вы, вероятно, захотите передать его через intval()
anyway, который вернет 0
, если значение не может быть проанализировано - если 0
является допустимым значением, вам, вероятно, придется обработать это каким-то образом, возможно, путем ограничения нижнего диапазона значения.
Ответ 3
Также было бы целесообразно выполнить некоторую проверку на стороне клиента с помощью JavaScript.
Обратная связь с сервером и обратно является длинной для того, что может означать опечатку, и вы сократите накладные расходы на сервер, сделав клиентский браузер немного уверенным в гарантии качества.
Ответ 4
Отметьте is_int и is_numeric. В каждой из ссылок есть примеры. Если вам нужна дополнительная помощь, я бы опубликовал данные, с которыми вы столкнулись, и образец кода.
ИЗМЕНИТЬ:
$quantity == 0
всегда будет числовым, так как он вернет логическое значение (1 или 0). Правильная вещь для этого:
if ( is_numeric( $quantity ) ) {
...
}
или
if ( is_int( $quantity ) ) {
...
}
Ответ 5
Другой альтернативой является 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 состоит из всех цифр.
string 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
?>
Ответ 6
Что сказал Роб, хотя вместо регулярных выражений для проверки цифр я использовал бы ctype_digit
Ответ 7
Таркун имеет лучший ответ. Если вы задаете такой вопрос, я предполагаю, что вы на самом деле не хотите начинать возиться с reg-exp только пока.
Переосмыслить свою логику. Почему вы хотите проверить, является ли $number == 0 числовым результатом? Если вы пытаетесь избежать ошибок b/c, вы считаете возможным, чтобы количество не имело назначенного значения, вы проверяете немного позже. Это очень распространенное (и гнусное) отверстие безопасности в вашем приложении - если значение $quantity имеет значение, полученное от входа пользователя, убедитесь, что вы дезактивируете ввод до того, как он достигнет этого момента в процессе выполнения. В качестве меньшей части проблемы вам не нужно будет присваивать значение по умолчанию, потому что ранее вы дезинфицировали свой ввод (и эта санировка - это то, где вы будете иметь дело с ситуацией "без ввода" ).
Удачи!
Ответ 8
Использовать регулярные выражения: /^\d+$/
должен решить проблему
Ответ 9
Попробуйте следующее:
$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;
}
}