문자열이 진정한 PHP 정수 유형의 유효한 표현인지 진정으로 알고 싶다면 ...
in_array($string, array_map('strval', range(PHP_INT_MIN, PHP_INT_MAX)), true)
그러나 세트가 너무 커서 실행이 불가능합니다 (이 경우 메모리에 맞지 않을 경우 루프하는 경우 너무 많은 CPU주기가 소요됨).
문자열 비교를 통해 이진 검색을 수행 할 수 있지만 더 좋은 방법이 있습니다.
가장 간단한 것 :
strlen($string) <= max(strlen((string)PHP_INT_MIN), strlen((string)PHP_INT_MAX)) && $string === (string)(int)$string
다음과 같은 다른 특이한 방법이 있습니다.
is_int(array_keys([$string => null])[0])
문자열 비교를 수행 할 수도 있지만 ctype_digit와 같은 작업을 수행하고 길이가 적절한 지 확인하고 (ctype_digit와 같은 작업을 수행하기 전에 CPU를 낭비하지 마십시오) 음수를 처리하기가 어색합니다.
filter_var 은 문자열이 실제로 PHP 정수의 표현이라고 올바르게 주장 하지 않습니다 . 선행 + 및 주변 공백을 허용합니다.
내부적으로 PHP는 엄격한 비교를 위해 "_zend_handle_numeric_str"함수를 사용하지만,이를 어디서나 직접 노출시키지 않으므로 배열 키를 사용하는 트릭이 있습니다 (PHP 정수를 나타내는 문자열을 PHP 정수로 변환하는 데 사용됨).
PHP에서 바이너리로 안전하게 변환하려면이 방법을 사용하십시오.
모든 사람이 원하는 것은 아니며 사용자 입력을 처리하는 경우 일 수 있습니다. filter_var는 그다지 나쁘지 않으며 대부분의 경우 PHP를 처음 사용하는 사람들에게는 상당히 안전합니다.
길이 확인, ctype_digit 및 범위 내에있는 변환 된 값 확인도 사용자 입력에있어 상당히 견고합니다. 더 복잡한 체계는 트림 또는 정규식을 원할 수 있습니다.
그 점에서 많은 답변이있는 문제는 질문이 모호하지만 답변이해서는 안된다는 것입니다. 솔루션을 제안하려는 경우 솔루션이 무엇을 기대하고 기대하지 않을지를 정확하게 설명 할 수 있어야합니다. 그렇지 않으면 답변이 질문과 일치하는지 또는 안전한지 알 수 없습니다. PHP 매뉴얼은 그것이 제공하는 각 관련 방법에 대한 모든 경고를 설명하지 않기 때문에 항상 도움이되지는 않습니다. ctype_digit 및 is_int와 같은 것은 매우 안정적이며 쉽게 편집 할 수 있지만 is_numeric, filter_var 및 juggling (+ $ var) 또는 캐스팅 (intval / floatval)의 세부 사항은 제대로 문서화되지 않았습니다.
이것은 당신을위한 PHP 퍼지입니다. 불일치와 함께 문자열을 정수로 해석하기위한 수많은 스키마가 있습니다. 정수 문자열을 검증하는 가장 엄격한 방법은 사용자에게 직접 노출되지 않습니다.