Если вам нужны только (и только) действительные целые числа, и вы не хотите, чтобы пользователи связывались с вашими данными и базой данных с hexadecimal
или binary
или любой другой формой чисел, тогда вы всегда можете использовать этот метод:
if(((string) (int) $stringVariable) === $stringVariable) {
// Thats a valid integer :p
}
else {
// you are out of luck :(
}
Трюк прост. Он преобразует переменную типа string в целочисленный тип, а затем возвращает ее обратно в строку.
Супер быстро, Супер просто.
Ради тестирования я подготовил тест:
'1337' is pure integer.
'0x539' is not.
'02471' is not.
'0000343' is not.
'0b10100111001' is not.
'1337e0' is not.
'not numeric' is not.
'not numeric 23' is not.
'9.1' is not.
'+655' is not.
'-586' is pure integer.
Единственное место, где этот метод терпит неудачу, это отрицательные числа, поэтому вам нужно проверить это рядом (используйте ((string) (int) $stringVariable) === $stringVariable && $stringVariable[0] !== "-"
).
Теперь я подумал, что метод preg_match
самый лучший. но в любом проекте, который касается пользователей, скорость является важным фактором. поэтому я подготовил бенчмаркинг, выполнив этот тест 500 000 раз, и результаты были поразительными:
Мой собственный изобретенный метод занял только:
6.4700090885162
секунды для завершения по сравнению с preg_match
, что заняло:
77.020107984543
секунд для завершения этого теста!