2015-07-20 3 views
4

PHP sanitize filters Из списка есть один вариант дезинфицировать целых чисел:PHP: Как дезинфицировать натуральное число (положительный INT)?

FILTER_SANITIZE_NUMBER_INT - Удалить все символы, кроме цифр , плюс и минус.

Если мы используем:

filter_var($var2San, FILTER_SANITIZE_NUMBER_INT); 

Это уберет точки . и запятые , но + и - признаки остаются. Например: ++++ --- 1.110,4 <b>m<sup>2</sup></b> дезинфицирован до ++++---111042. В идеале filter_var вернет false, когда число равно 0, то есть число должно быть natural number, более конкретно, положительным целым числом.

Поэтому FILTER_SANITIZE_NUMBER_NATURAL будет удобно ... Есть ли обходной путь для этого или мне нужен RegExp?

ответ

7

Использование регулярных выражений функций кажется излишним, так как есть другой способ использовать filter_var функцию:

filter_var($var2San, FILTER_VALIDATE_INT, 
      array('options' => array('min_range' => 1))); 

FILTER_ VALIDATE _INT перечислен под PHP filters flags и без определения конкретного флага (в $options массиве), filter_var будет определять и возвращать номер, если он действителен, в противном случае возвращается FALSE. Примеры:

  • -1FALSE
  • 0FALSE
  • 11
  • + 1FALSE
  • +22
  • ++3FALSE
  • 4+FALSE
  • 5.6FALSE
  • 7,8FALSE

Это гарантирует, что номер, который вы тест является натурального числаположительного целого без каких-либо других символов, кроме цифр вокруг это, за исключением + слева). Даже если у него есть +, он вернет только номер.

Существует небольшое снижение, хотя, если число превышает 2147483647, оно также вернет FALSE (maximum positive value for a 32-bit signed binary integer).

+1

Существует также 'ctype_digit()', который не имеет ограничения на его максимальное значение, но также не позволяет «+», разделители тысяч, десятичное место и т. Д.В буквальном смысле вы использовали регулярное выражение «^ [0-9] + $» для проверки вашей строки, хотя, очевидно, намного быстрее. – Ghedipunk

+1

@Ghedipunk Несмотря на то, что возвращает только 'false' или' true' [ctype_digit] (http://php.net/manual/en/function.ctype-digit.php), кажется очень хорошей альтернативой, оцененной! – Armfoot

+1

Очень чистый. Любить это. – Kray