ноль в поле проходит как false

Vano_php

Новичок
ноль в поле проходит как false

Здравствуйте, товарищи!
Нужна помощь, парюсь уже неделю, не могу понять... Сейчас попробую изложить наиболее понятно и подробно...
Есть регистрационная форма, поля для ввода, кнопка отправления на обработку серваку и занесение данных в бд... вобщем обычная форма авторизации. Есть поля в которые должны вводиться только цифры, тоесть целые значения integer, без букв и всякой ерунды. Проверку осуществляю спомощью этого:
if (preg_match("/^[0-9]+$/", $_POST['s_srok']))
{тепа далее все ок'ей}
else
{типа все хреново}

НО есть одно НО! При вводе в поле ноль 0 несрабатывает ничего (а должно по идеи канать как все замечательно)! На экране нет ни ок, ни хреново, ни ошибок. То есть он его хавает как false пустую строчку (а у меня до этого стоит проверка если строка пустая - то хер тебе, если нет - то вот это иф на цифры, но и он не выводит ничего при ноле!). Как избежать этого? Может взять другую функцию? Или как?
Буду благодарен за любую помощь.
 

SiMM

Новичок
> ноль в поле проходит как false
[m]if[/m]
[m]language.types.boolean#language.types.boolean.casting[/m]
[m]language.operators.comparison[/m]

> а у меня до этого стоит проверка если строка пустая
А нахрена она сдалась, если регулярник эту ситуацию и так выцепляет?
 

White Rabbit

белый кролик
Vano_php
На false срабатывает empty();
А со strlen() все будет работать как надо.
Хотя SiMM прав насчет ненужности этой проверки.
 

ys

отодвинутый новичок
Кстати к
http://www.php.net/language.types.boolean#language.types.boolean.casting

к: "the empty string, and the string "0" "
стоит добавить, что "00", "000", "0000", "00000" - тоже, после приведения, дает (bool) FALSE .
 

SiMM

Новичок
> "00", "000", "0000", "00000" - тоже, после приведения, дает (bool) FALSE
PHP:
echo PHP_VERSION."\n";
var_dump((bool)'00');
// 4.4.2
// bool(true)
 

ys

отодвинутый новичок
Так, видимо мне надо проспаться.

if(0 == '0000') echo " '0000' - is 0 ";
хотя
// bool(true)
 

SiMM

Новичок
> if(0 == '0000') echo " '0000' - is 0 ";
Тут приведение к целому, я так понимаю, происходит :) В итоге выражение получается эквивалентным if (0 == 0) echo "'0000' - is 0";
 

Vano_php

Новичок
Автор оригинала: moxnatiy
а просто intval() делать религия не позволяет?
Открыл библию в посках intval() и нашел такой догмат:
Вы не можете использовать функцию intval() для массивов или объектов.
А у меня же как видно из примера-вопроса используется массив $_POST[]!

preg_match() заменил на is_numeric() вродебы всё работает:)

Спасибо за помощь, пошел пополнять свои знания о PHP
 

Frol

Новичок
Вы не можете использовать функцию intval() для массивов или объектов.
А у меня же как видно из примера-вопроса используется массив $_POST[]!
не бредь.
массив пост используется, но в функцию он не передается.
почувствуй разницу.
 

Vano_php

Новичок
одна фигня intval() не работает в данном месте коректно, не пишет ошибок но выводит не правдоподобную информацию...
 

McSimm

Новичок
intval($a), empty($a), просто ($a) не помогут отличить пустую строку от строки '0' или от числа 0

strlen($a)
('' != $a)
 
Сверху