php проверка на отрицательное число
Лучший способ проверить положительное целое число (PHP)?
Мне нужно проверить, что входное значение формы является целым положительным (а не целое число), и я заметил еще один фрагмент кода, используя следующий код:
Мне было интересно, есть ли преимущество в использовании трех проверок выше, вместо того, чтобы делать что-то вроде этого:
ОТВЕТЫ
Ответ 1
См. эти ссылки для получения дополнительной информации:
Ответ 2
Не уверен, почему нет предложения использовать filter_var для этого. Я знаю, что это старая ветка, но, может быть, она кому-нибудь поможет (в конце концов, я оказался здесь, верно?).
Вы также можете добавить максимальное значение.
Ответ 3
Лучший способ проверки положительных целых чисел, когда переменная может быть INTEGER или STRING, представляющая целое число:
Разница между этой проверкой и is_numeric() заключается в том, что is_numeric() вернет true даже для значений, которые представляют числа, которые не являются целыми числами (например, «+0.123» ).
Ответ 4
Он определенно движется к земле микро-оптимизации, но эй: код, над которым я работаю, перебирает миллионы предметов каждый день и в пятницу. Поэтому я немного экспериментировал.
Затем я выполнил вышеуказанные тесты как для целых, так и для строковых значений
Вариант 1: простое тестирование литья/эквивалентности
Вариант 2: использование is_int() и ctype_digit()
Вариант 3: регулярные выражения
Возможно, неудивительно, что вариант 1, безусловно, самый быстрый, поскольку нет вызовов функций, просто кастинг. Также стоит отметить, что в отличие от других методов, вариант 1 рассматривает значение string-float-integer «5.0» как целое число:
Будет ли это хорошо для вашего конкретного случая использования оставлено в качестве упражнения для читателя.
Ответ 5
Ответ 6
Ответ 7
Ответ 8
Laravel 4.2 Правило проверки положительного числа
Он принимает только положительные числа, включая значения float.
Ответ 9
Вместо проверки int OR string с несколькими условиями, например:
Ответ 10
is_int вернет false, если передал строку. См. Справочные примеры PHP для is_int
Ответ 11
Вам действительно не нужно использовать все три проверки, и если вы хотите получить положительное целое число, вы можете сделать противоположное тому, что находится в вашем коде:
Проверьте ответ Sören для получения дополнительной информации о разнице между is_int() и is_numeric()
Ответ 12
и если вы хотите ограничить длину:
Так pisitive int с максимальной длиной 6:
Ответ 13
Чтобы проверить положительное целочисленное использование:
Используйте ту, которая соответствует вашей цели, поскольку они одинаковы. Следующие примеры демонстрируют разницу между is_numeric() и is_int() :
Ответ 14
Ответ 15
Хорошо, я знаю, что эта ветка действительно старая, но я разделяю мнение @Jeffrey Vdovjak: поскольку я смог ее найти, она все равно может помочь кому-то другому.
Ответ 16
Ответ 17
Если вы используете «is_int», переменная должна быть целочисленной, поэтому она не может быть значением float. (не требуется раунд).
Ответ 18
Ответ 19
Я бы сделал что-то вроде этого:
Число получает приведение к положительному или отрицательному числу в зависимости от знака минус, который находится спереди. Затем сравнивает число типов с числом больше 0, чтобы определить, является ли число положительным.
Ответ 20
Это мое решение, надеюсь, полезно:
i проверить, является ли строка числовой, второй проверить, чтобы убедиться, что она целая и третья, чтобы она была положительной
Числа и операции над ними в PHP
Замечания
Чтобы вывести результат операции на экран, не обязательно вводить переменную. Можно просто выполнить нужные операции внутри команды echo :
В операции не обязательно должно участвовать только два числа, их может быть любое количество. Сложим, например, три числа и сразу же выведем результат:
Операции над переменными
Математические операции можно производить не только над числами, но и над переменными. Сложим, к примеру, значения двух переменных:
Не обязательно сразу выводить результат операции, можно вначале записать его в какую нибудь переменную, а уже затем вывести значение этой переменной:
Приоритет операций
Математические операции PHP имеют такой же приоритет, как в обычной математике. То есть в начале выполняется умножение и деление, а потом уже сложение и вычитание. В следующем примере вначале 2 умножится на 2 и затем к результату прибавится 3 :
Не запуская код, определите, что выведется на экран:
Не запуская код, определите, что выведется на экран:
Не запуская код, определите, что выведется на экран:
Не запуская код, определите, что выведется на экран:
Равный приоритет
Умножение и деление имеют равный приоритет и выполняются по очереди слева направо. Рассмотрим на примере, что имеется ввиду. В следующем коде вначале выполнится деление, а потом умножение:
Если же переставить знаки местами, то вначале выполнится умножение, а потом деление:
В следующем примере каждая новая операция деления будет применяться к предыдущей:
Не запуская код, определите, что выведется на экран:
Не запуская код, определите, что выведется на экран:
Группирующие скобки
При желании вы можете указывать приоритет операций с помощью круглых скобок. Давайте, например, переделаем наш код так, чтобы вначале выполнилось сложение, а уже потом умножение:
Скобок может быть любое количество, в том числе и вложенных друг в друга:
Не запуская код, определите, что выведется на экран:
Не запуская код, определите, что выведется на экран:
Не запуская код, определите, что выведется на экран:
Не запуская код, определите, что выведется на экран:
Нюансы группировки
В данном случае скобки получаются лишними (у умножения ведь и так приоритет), но код является допустимым. Иногда такую группировку используют в тех местах, где приоритет операций не очевиден. Для примера рассмотрим следующий код:
Как вы уже знаете, в нем вначале выполнится деление, а потом умножение. Но с первого взгляда это может быть не слишком очевидно. Здесь можно использовать группирующие скобки, чтобы явно показать приоритет:
Не запуская код, определите, что выведется на экран:
Не запуская код, определите, что выведется на экран:
Дроби
В PHP также существуют и десятичные дроби. В них целая и дробная части отделяются друг от друга точкой. Смотрите пример:
Смотрите еще пример:
Отрицательные числа
Числа могут быть отрицательными. Для этого перед числом необходимо поставить знак минус:
Знак минус можно писать как к числам, так и к переменным:
Остаток от деления
Возведение в степень
Давайте возведем в степень значение переменной:
Может быть такое, что и число, и степень будут содержаться в переменных:
Приоритет возведения в степень
Операция возведения в степень имеет приоритет перед умножением и делением. В следующем примере вначале выполнится возведение в степень, а затем умножение:
Не запуская код, определите, что выведется на экран:
Не запуская код, определите, что выведется на экран:
Не запуская код, определите, что выведется на экран:
Не запуская код, определите, что выведется на экран:
Не запуская код, определите, что выведется на экран:
is_int
(PHP 4, PHP 5, PHP 7, PHP 8)
is_int — Проверяет, является ли переменная целым числом
Описание
Проверяет, является ли тип переменной целочисленным.
Список параметров
Возвращаемые значения
Примеры
Пример #1 Пример использования is_int()
Результат выполнения данного примера:
Смотрите также
User Contributed Notes 30 notes
I’ve found that both that is_int and ctype_digit don’t behave quite as I’d expect, so I made a simple function called isInteger which does. I hope somebody finds it useful.
var_dump ( is_int ( 23 )); //bool(true)
var_dump ( is_int ( «23» )); //bool(false)
var_dump ( is_int ( 23.5 )); //bool(false)
var_dump ( is_int ( NULL )); //bool(false)
var_dump ( is_int ( «» )); //bool(false)
var_dump ( ctype_digit ( 23 )); //bool(true)
var_dump ( ctype_digit ( «23» )); //bool(false)
var_dump ( ctype_digit ( 23.5 )); //bool(false)
var_dump ( ctype_digit ( NULL )); //bool(false)
var_dump ( ctype_digit ( «» )); //bool(true)
var_dump ( isInteger ( 23 )); //bool(true)
var_dump ( isInteger ( «23» )); //bool(true)
var_dump ( isInteger ( 23.5 )); //bool(false)
var_dump ( isInteger ( NULL )); //bool(false)
var_dump ( isInteger ( «» )); //bool(false)
?>
The correct output for parts of his examples should be:
Keep in mind that is_int() operates in signed fashion, not unsigned, and is limited to the word size of the environment php is running in.
In a 32-bit environment:
( 2147483647 ); // true
is_int ( 2147483648 ); // false
is_int ( 9223372036854775807 ); // false
is_int ( 9223372036854775808 ); // false
?>
In a 64-bit environment:
( 2147483647 ); // true
is_int ( 2147483648 ); // true
is_int ( 9223372036854775807 ); // true
is_int ( 9223372036854775808 ); // false
?>
If you find yourself deployed in a 32-bit environment where you are required to deal with numeric confirmation of integers (and integers only) potentially breaching the 32-bit span, you can combine is_int() with is_float() to guarantee a cover of the full, signed 64-bit span:
= 2147483647 ; // will always be true for is_int(), but never for is_float()
$big = 9223372036854775807 ; // will only be true for is_int() in a 64-bit environment
I’ve found a faster way of determining an integer.
On my env, this method takes about half the time of using is_int().
Cast the value then check if it is identical to the original.
With this function you can check if every of multiple variables are int. This is a little more comfortable than writing ‘is_int’ for every variable you’ve got.
Simon Neaves’s answer is incomplete: negative integers will return false.
Проверка на целое число >= 1
Вы все долбанулись махом, что ли?
Всё. Никаких регулярок.
lexa
Согласен, проглядел
is_numeric — Finds whether a variable is a number or a numeric string
с is_int не читая мануалов думал алиасинг)
lexa
а не целые то тоже пойдут))
так что лучше intval($var)==$var
Как интересно товарищи проверку на инт делают. Даже не ожидал такого размаха
Вот теперь советую.
и что вы думаете))) по мнению пхп: 0 == text 2+2=5
В этой таблице не приведено везде сравнение с числами меньше единицы.
Вот это адекватно работает!
и. Про каждую тему, которая находится здесь, было обсуждение на stackoverflow.
Вообще не вижу никаких поводов для беспокойства. Проверка на инт как правило нужна для фильтрации от sql-инъекции, я привёл самый быстрый и простой практичный пример, как это делается.
А теперь вы меня тыкаете носом, что я ничего вам не рассказал про отрицательные числа. Некрасиво.
Самый надёжный (и медленный) способ
Кстати, почему /^3+$/ работает быстрее [^0-9]?
ctype_digit
(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
ctype_digit — Проверяет наличие цифровых символов в строке
Описание
Проверяет, являются ли все символы в строке text цифровыми.
Список параметров
Возвращаемые значения
Примеры
Пример #1 Пример использования ctype_digit()
Результат выполнения данного примера:
Пример #2 Пример использования ctype_digit() со сравнением строк и целых чисел
Смотрите также
User Contributed Notes 14 notes
All basic PHP functions which i tried returned unexpected results. I would just like to check whether some variable only contains numbers. For example: when i spread my script to the public i cannot require users to only use numbers as string or as integer. For those situation i wrote my own function which handles all inconveniences of other functions and which is not depending on regular expressions. Some people strongly believe that regular functions slow down your script.
The reason to write this function:
1. is_numeric() accepts values like: +0123.45e6 (but you would expect it would not)
2. is_int() does not accept HTML form fields (like: 123) because they are treated as strings (like: «123»).
3. ctype_digit() excepts all numbers to be strings (like: «123») and does not validate real integers (like: 123).
4. Probably some functions would parse a boolean (like: true or false) as 0 or 1 and validate it in that manner.
ctype_digit() will treat all passed integers below 256 as character-codes. It returns true for 48 through 57 (ASCII ‘0’-‘9’) and false for the rest.
(Note: the PHP type must be an int; if you pass strings it works as expected)