Простая задача на php

123 4
O
На сайте с 29.05.2008
Offline
195
#11

(string)(int)$var === $var. Красиво - но плохо.

Зачем эта универсальность? В $_POST, $_GET приходят переменные уже с определенным типом. То-есть, если нужен Ineteger (не Float) с значением больше 0, достаточно проверить на is_int и > 0.

Оптимизайка
На сайте с 11.03.2012
Offline
396
#12
kiowas:
Вторая проверка выдаст фатальную ошибку, если $var = new some_object();

Не, ну если переменная может содержать любой тип данных, то:

(is_string($var) || is_numeric($var)) && ctype_digit((string)$var)

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
kiowas
На сайте с 06.02.2010
Offline
61
#13
siv1987:
kiowas, либо вы не то пишите, либо вы не то проверяете... и 0 и '0' результат bool(true). Может у нас разные версии php?..

В preg_match стоит маска /[^0-9]+/

Она срабатывает, если найдено что-то не похожее на цифру и тогда возвращается false.

Если я передам в нее '0', он подумает, что это цифра и вернет true, но это не положительное целое число.

подпись
dkameleon
На сайте с 09.12.2005
Offline
386
#14
var_dump(abs(intval($var)) == $var);

или же я задачу понял не полностью...

Дизайн интерьера (http://balabukha.com/)
kiowas
На сайте с 06.02.2010
Offline
61
#15
ortegas:
(string)(int)$var === $var. Красиво - но плохо.

Зачем эта универсальность? В $_POST, $_GET приходят переменные уже с определенным типом. То-есть, если нужен Ineteger (не Float) с значением больше 0, достаточно проверить на is_int и > 0.

Проверка не только переменных из $_POST и $_GET. Вот в чем соль :(

---------- Добавлено 07.06.2013 в 20:00 ----------

Оптимизайка:
Не, ну если переменная может содержать любой тип данных, то:

(is_string($var) || is_numeric($var)) && ctype_digit((string)$var)

Очень близко, но нужно лепить дополнительные проверки, так как проверку проходят занчения:

1. $var = '054';

2. $var = '0';

3. $var = 0;

siv1987
На сайте с 02.04.2009
Offline
427
#16
kiowas:
Если я передам в нее '0', он подумает, что это цифра и вернет true, но это не положительное целое число.

да боже ж ты мой

if( preg_match('/[^0-9]/', $num) OR $num < 1 ) return false;

return true;

kiowas
На сайте с 06.02.2010
Offline
61
#17
dkameleon:
или же я задачу понял не полностью...

Проходит проверку, если:

1. $var = 'asdfa';

2. $var = '25.0'

И много где еще.... :(

dkameleon
На сайте с 09.12.2005
Offline
386
#18
kiowas:
на предмет того, что в PHP отсутствует, казалось бы банальная функция
kiowas:
И так задача:
Проверить, желательно красиво и кратко, переменную, на предмет того, что она содержит целое положительное число, или строку содержащую данное число, например '13' или '142', в строке никаких лишних символов не должно быть.

а зачем вообще?

строка, состоящая из одних только чисел? тогда прег_матч справится:

#^\d+$#

больше нуля? ещё одно условие:

preg_match('#^\d+$#', $num) && $num > 0
siv1987
На сайте с 02.04.2009
Offline
427
#19
kiowas:
Проходит проверку, если:
2. $var = '25.0'

kiowas, вы уж извините, вы изначально не правильно поставили задачу. Валидация данных по своему критерию и проверка типа данных - это разные вещи.

kiowas
На сайте с 06.02.2010
Offline
61
#20
siv1987:
да боже ж ты мой
if( preg_match('/[^0-9]/', $num) OR $num < 1 ) return false;
return true;

😂

Проходит, если:

1. $var = '054';

2. $var = true;

А так же если переменная является массивом или объектом. Нужно еще лепить....

123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий