PHP проверяет целые числа - PullRequest
       5

PHP проверяет целые числа

1 голос
/ 04 апреля 2010

Мне было интересно, что будет лучшим способом проверки целого числа. Я бы хотел, чтобы это работало и со строками, чтобы я мог что-то вроде

(строка) +00003 -> (int) 3 (допустимо)

(строка) -027 -> (int) -27 (допустимо)

(int) 33 -> (int) 33 (действует)

(строка) '33a' -> (ЛОЖЬ) (неверно)

Вот к чему я так далеко:

function parseInt($int){
    //If $int already is integer, return it
    if(is_int($int)){return $int;}
//If not, convert it to string
$int=(string)$int;
//If we have '+' or '-' at the beginning of the string, remove them
$validate = ($int[0] === '-' || $int[0] === '+')?substr($int, 1):$int;
//If $validate matches pattern 0-9 convert $int to integer and return it
//otherwise return false
return preg_match('/^[0-9]+$/', $validate)?(int)$int:FALSE;
}

Насколько я тестировал, эта функция работает, но выглядит как неуклюжий обходной путь.

Есть ли лучший способ написать такую ​​функцию. Я также попробовал

filter_var($foo, FILTER_VALIDATE_INT);

но он не будет принимать значения типа '0003', '-0' и т. Д.

Ответы [ 6 ]

6 голосов
/ 04 апреля 2010

Вы можете попробовать ctype_digit или is_numeric

2 голосов
/ 04 апреля 2010

есть встроенная функция с именем intval () . Это то, что вы ищете?

1 голос
/ 04 апреля 2010

он не примет «0003», потому что это не «чистое» целое число. Целое число не может начинаться с нуля, но оно может быть отрицательным (обратите внимание, что вы удаляете «-» с помощью своей функции). Как я уже говорил, используйте ctype_digit или is_numeric

0 голосов
/ 05 апреля 2010

Вы также можете использовать пакет проверки PEAR; http://pear.php.net/manual/en/package.validate.validate.number.php

Различные варианты:

  1. десятичный (смешанный) - десятичные символы или ложь, если десятичная дробь не допускается Например ",." разрешить оба "." и ",".
  2. dec_prec (int) - Количество разрешенных десятичных знаков.
  3. min (float) - минимальное значение.
  4. max (float) - максимальное значение.
0 голосов
/ 04 апреля 2010

Быстрый и грязный путь, насколько я знаю, не справится с '0003'.

function parseInt($in) {
    return ($in == intval($in) ? $in : false);
}
0 голосов
/ 04 апреля 2010

Вы можете использовать intval , как предлагает Джейкоб.

Однако, если вам нужен класс проверки int с поддержкой Locale, я предлагаю использовать Zend Framework Zend_Validate_Int валидатор.

Usage

<?php
$v = new Zend_Validate_Int();
if ($v->isValid($myVal)) {
    // yay
} else {
    // fail
}

Обратите внимание, что из-за структуры выбора и выбора Zend Framework вам не нужно использовать это для всего вашего приложения. Валидаторы имеют минимальные зависимости от Zend_Locale для проверки с учетом локали и Zend_Registry.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...