Jeśli chcesz naprawdę wiedzieć, czy łańcuch jest prawidłową reprezentacją prawdziwej liczby całkowitej PHP ...
in_array($string, array_map('strval', range(PHP_INT_MIN, PHP_INT_MAX)), true)
Jednak nie można tego uruchomić, ponieważ zestaw jest zbyt duży (w tym przypadku nie zmieści się w pamięci, jeśli zamiast tego wykonasz pętlę, zajmie to zbyt wiele cykli procesora).
Być może możesz przeprowadzić wyszukiwanie binarne z porównaniem ciągów, jednak są lepsze sposoby.
Najprostsza istota:
strlen($string) <= max(strlen((string)PHP_INT_MIN), strlen((string)PHP_INT_MAX)) && $string === (string)(int)$string
Istnieją inne nietypowe sposoby podejścia do tego problemu, takie jak:
is_int(array_keys([$string => null])[0])
Możesz także porównać ciągi znaków, ale nadal będziesz musiał zrobić takie rzeczy, jak ctype_digit, sprawdzić, czy długość jest rozsądna (nie marnuj procesora przed wykonaniem takich rzeczy, jak ctype_digit) i trochę niezręcznej obsługi liczb ujemnych.
Zauważ, że zmienna filter_var nie zapewnia poprawnie, że łańcuch jest autentyczną reprezentacją liczby całkowitej PHP. Umożliwi to wiodący znak + i otaczające go białe znaki.
Wewnętrznie PHP używa funkcji "_zend_handle_numeric_str" do ścisłego porównania, ale nigdzie nie ujawnia tego bezpośrednio, stąd sztuczka z użyciem kluczy tablicowych (która używa jej do konwersji dowolnego ciągu będącego reprezentacją liczby całkowitej PHP na liczbę całkowitą PHP).
Jeśli chcesz, aby konwersja plików binarnych do iz PHP była bezpieczna, to jest to podejście.
Nie każdy może tego chcieć i może to być przypadek obsługi danych wejściowych użytkownika. filter_var nie jest na to zły i będzie całkiem bezpieczny w większości przypadków dla osób, które nie znają PHP.
Sprawdzenie długości, ctype_digit, a następnie sprawdzenie przekonwertowanej wartości, czy znajduje się w zakresie, jest również dość solidne dla danych wejściowych użytkownika. Bardziej złożone schematy mogą wymagać trim lub regex.
Problem z wieloma odpowiedziami tutaj w tym względzie polega na tym, że chociaż pytanie jest niejasne, odpowiedzi nie powinny być. Jeśli masz zamiar zaproponować rozwiązanie, powinieneś być w stanie dokładnie wyjaśnić, co będzie, a czego nie będziesz się spodziewać. Bez tego nie wiadomo, czy odpowiedź pasuje do pytania, czy jest bezpieczna. Podręcznik PHP nie zawsze pomaga, ponieważ nie wyjaśnia wszystkich zastrzeżeń dotyczących każdej z odpowiednich metod, które dostarcza. Rzeczy takie jak ctype_digit i is_int są bardzo niezawodne i łatwe do odczytania, ale szczegóły dotyczące is_numeric, filter_var i juggling (+ $ var) lub rzutowania (intval / floatval) są słabo udokumentowane.
To jest krówka PHP dla Ciebie. Ma niezliczoną liczbę schematów do interpretacji ciągów znaków jako liczb całkowitych, z niespójnościami. Najbardziej rygorystyczna metoda sprawdzania poprawności łańcucha liczb całkowitych nie jest bezpośrednio ujawniana użytkownikowi.