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

1 234
O
На сайте с 29.05.2008
Offline
195
#31

siv1987, нет. Смешно ведь для проверки чисел использовать регулярные выражения.

kiowas
На сайте с 06.02.2010
Offline
61
#32
siv1987:
if(is_numeric($num) AND $num > 0 AND ! preg_match('/^0|\./', $num)) return true;
return false;

Вы тоже гений!!! Хорошо!

А теперь вопрос: почему не сделаю такой тип или проверку. Положа руку на сердце, каждый скажет, что в веб программировании, переменных, которые по идее должны содержать именно такой тип данных подавляющее большинство!!! Согласитесь!

подпись
T
На сайте с 19.09.2012
Offline
29
#33


$y = filter_var($x, FILTER_VALIDATE_INT, array('options'=>array('min_range'=>1)));
if($y === false)
{
echo "FAIL";
}

или


$y = test_nat($x);
if($y === false)
{
echo "FAIL";
}

function test_nat($x)
{
return filter_var($x, FILTER_VALIDATE_INT, array('options'=>array('min_range'=>1)));
}
kiowas
На сайте с 06.02.2010
Offline
61
#34
ortegas:
siv1987, нет. Смешно ведь для проверки чисел использовать регулярные выражения.

Да, ваш вариант как бы правильней будет.

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

turen:

$y = filter_var($x, FILTER_VALIDATE_INT, array('options'=>array('min_range'=>1)));
if($y === false)
{
echo "FAIL";
}

или

$y = test_nat($x);
if($y === false)
{
echo "FAIL";
}

function test_nat($x)
{
return filter_var($x, FILTER_VALIDATE_INT, array('options'=>array('min_range'=>1)));
}

Разницы между двумя способами не вижу, но все равно, будет проходить проверку, если:

$var = true;

Нужно еще лепить конструкцию.

siv1987
На сайте с 02.04.2009
Offline
427
#35
ortegas:
siv1987, нет. Смешно ведь для проверки чисел использовать регулярные выражения.

Да. С чего бы это должно быть смешно? Тем более автор хочет валидацию.

kiowas:
Да, ваш вариант как бы правильней будет.

Ну как сказать "правильнее"...

kiowas
На сайте с 06.02.2010
Offline
61
#36
siv1987:
Да. С чего бы это должно быть смешно? Тем более автор хочет валидацию.


Ну как сказать "правильнее"...

Нет, ну правда, смотрите какая красивая проверка:

if((is_int($var) or (string)(int)$var === $var) && $var > 0)


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

Коллеги, пользуясь случаем, хотелось бы высказаться.

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

Я благодарю ortegas, за то, что не стал спрашивать что и почему, а быстро и коротко помог найти такое замечательное решение, которое я именно искал. Спасибо.

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#37

Вот ТС, скажите плиз, как так получается, что Вы не знаете что будет в переменной: массив, число(целое/дробное), объект, ресурс, ссылка...

Чем выносить себе моск - посмотрите в сторону перепила логики приложения;)

Просто у меня реально не укладывается в голове фраза: "а вдруг туда придет массив/объект/ресурс..."

Подпись))
kiowas
На сайте с 06.02.2010
Offline
61
#38
Милованов Ю.С:
Вот ТС, скажите плиз, как так получается, что Вы не знаете что будет в переменной: массив, число(целое/дробное), объект, ресурс, ссылка...
Чем выносить себе моск - посмотрите в сторону перепила логики приложения;)

Просто у меня реально не укладывается в голове фраза: "а вдруг туда придет массив/объект/ресурс..."

Я могу ответить. Пусть это будет откровением, но все же...

У меня есть приложение, которое стабильно работает. Сейчас я несколько меняю архитектуру. Переписываю некоторые функции и методы. Передо мной стал вопрос, как в новой архитектуре, а вернее как глубоко мне нужно проверять параметры, которые, например, передаются в метод класса.

Теоретически, я могу их не проверять вообще, ведь я сам пишу проект и я знаю как и что и куда передавать, так ведь? Но, нет, это не так... Проверка нужна. Какая-то проверка нужна, но какая? Проверять можно совсем чуть-чуть, а можно и чуть-чуть больше. А можно вообще досконально проверять. Граница между этими вариантами очень плавная, ее вообще нет. Не существует границы от нуля до единицы. Я не думаю, что вы сможете в нескольких предложения описать правила, по которым программисты решительно поняли бы, какие данные нужно проверять и где, а какие нет.

Такие вопросы решаются по каждой конкретной задаче отдельно. Т.к. я не могу провести границу между тем, что проверять и где, я не хочу париться на тему того, на сколько сильно я должен проверять четвертый параметр в функции. Я просто решил найти красивое и быстрое (с точки зрения производительности) решение, которое лишит нужды думать над этим. И это решение будет работать быстрее, чем решения других программистов, которые не считают необходимым проверять переменные на соответствие типа, но при этом загибают такие проверки на целое положительное число, что шлепнуться можно!

Ваши комментарии.

---------- Добавлено 07.06.2013 в 21:44 ----------

И рас уж вы еще не ответили, то позвольте добавить.

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


function myCheckDigit($num)
{
preg_match('/[^0-9]+/', $num, $matches);
if (count($matches))
{
return FALSE;
}
return TRUE;
}

Плюс, предложили "доработать функцию, чтобы работала с дробными и отрицательными числами".

При всем уважении к вам, как к "старому и закаленному форумчанину серча", я думаю, вы не будите против, если ваш совет, "посмотреть в сторону перепила логики приложения", я оставлю без внимания 😂

siv1987
На сайте с 02.04.2009
Offline
427
#39
kiowas:
но при этом загибают такие проверки на целое положительное число, что шлепнуться можно!

Ну если шлепаетесь от /^0/ или от функции is_integer то даже не знаю что сказать...

[Удален]
#40

$n = "20";

if ( (int)$n == $n && (int)$n > 0 )

---------- Добавлено 07.06.2013 в 22:56 ----------

Милованов Ю.С:
Вот ТС, скажите плиз, как так получается, что Вы не знаете что будет в переменной: массив, число(целое/дробное), объект, ресурс, ссылка...
Чем выносить себе моск - посмотрите в сторону перепила логики приложения

Просто у меня реально не укладывается в голове фраза: "а вдруг туда придет массив/объект/ресурс..."

Ограничения php ограничивают и программиста, к примеру на python если не кастомизировать и не привязываться к типу, все функции шаблонны и работают с любыми типами.

1 234

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