PHP-эквивалент функции parseInt JavaScript?

148
20

Возможный дубликат:
Проверьте, является ли переменная натуральным числом



Просто наткнулся на то, где мне нужно дезинформировать ввод и удалить все незнаковые символы с помощью PHP. Мысль о создании функции сама, но сначала хотела проверить возможные встроенные функции, поэтому мне не придется тратить лишнее время на изобретательство колеса.

спросил(а) 2012-09-29T10:25:00+04:00 7 лет, 10 месяцев назад
1
Решение
189

Вы можете использовать регулярное выражение, как показано ниже


$int = (int) preg_replace('/\D/', '', $strNonNumeric);

ИЛИ


$int = (int) preg_replace('/[^0-9]/', '', $strNonNumeric);

ответил(а) 2012-09-29T10:29:00+04:00 7 лет, 10 месяцев назад
178

В PHP нет прямого эквивалента pareseInt(), потому что PHP не имеет типа данных NaN. parseInt() будет выдавать NaN, если значение не может быть проанализировано.


Кроме того, parseInt() имеет параметр radix, который не предоставляет ни один из параметров PHP.


Но при этом, если все, что вы хотите сделать, это превратить строку в целое число, то есть несколько вариантов:


$int = (int)$string;

$int = intval($string);

$int = settype($string,'integer');


Эти трое будут работать одинаково. Могут быть некоторые случаи ребер, где intval() отличается от двух других, но в целом они превратят строку в int. В отсутствие NaN все они выводят 0 (ноль), если строка не является числовой и не может быть проанализирована. Но этого должно быть достаточно для большинства целей санитарии БД.


Если вам действительно нужна ошибка NaN, ближайшая вы получите null. Вы можете получить это с помощью filter_var():

$value = filter_var(FALSE, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE);

Если вы просто хотите проверить, что строка является числовой, функция is_numeric() может сделать это:


$bool = is_numeric($string);

Тем не менее, он возвращает true для десятичных знаков, а также для научной нотации, поэтому не может быть идеальным для большинства ситуаций. Лучшим вариантом является ctype_digit(), который возвращает true, если строка состоит только из цифр:


$bool = ctype_digit($string);

Если это не подходит, всегда существует опция regex, используя preg_match() или preg_replace(), но это определенно избыточно для такого сценария.

ответил(а) 2012-09-29T11:00:00+04:00 7 лет, 10 месяцев назад
78

Я бы рекомендовал использовать FILTER_VALIDATE_INT Filter.


об фильтрах на php.net

ответил(а) 2012-09-29T10:31:00+04:00 7 лет, 10 месяцев назад
68

Вы можете использовать:


$string = "90"; //string
$myInt = (int) $string; //parse to int

ответил(а) 2012-09-29T10:27:00+04:00 7 лет, 10 месяцев назад
40

Вы также можете использовать sscanf (как и в C)


<?php

$str = "10";

sscanf($str, "%d", $intVal);
$intVal *= 10;

echo $intVal;
?>


Вывод:


100

ответил(а) 2012-09-29T10:29:00+04:00 7 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема