[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проверка на числа, включая 0
lexu
Существует ли аналог функции is_numeric, который включал бы 0, или здесь без регулярных выражений не обойтись?

Спасибо.



Спустя 2 минуты, 59 секунд (23.08.2010 - 10:39) Basili4 написал(а):
зачем аналог ???

$a="0";

echo is_numeric($a)?1:0; //1

Спустя 7 минут, 1 секунда (23.08.2010 - 10:46) twin написал(а):
Так то оно так... Только зачем строковое представление пихать? smile.gif

Спустя 9 минут, 1 секунда (23.08.2010 - 10:55) lexu написал(а):
Прошу прощения, не совсем коректно задал вопрос.

При получении данных из формы, идет проверка (допустимы только числа, нужен 0 в том числе), а is_numeric 0 не пропускает.

Как я понимаю, она считает это поле пустым.

Спустя 12 минут, 33 секунды (23.08.2010 - 11:08) twin написал(а):
Ты наверное путаешь с empty()...

Спустя 1 минута, 27 секунд (23.08.2010 - 11:09) linker написал(а):
0 - это цифра? Цифра, значит is_numeric() пропустит.

Спустя 13 минут, 6 секунд (23.08.2010 - 11:22) Basili4 написал(а):
Цитата (twin @ 23.08.2010 - 11:46)
ак то оно так... Только зачем строковое представление пихать?

Ну чтоб показать, что все работатет, is_numeric находит цифру даже ели она строка

Спустя 1 минута, 31 секунда (23.08.2010 - 11:24) Basili4 написал(а):
lexu
покажи код обработчика. Специально сделал форму все циферы положительные отрицательные проходят вот только дробные не проверял.

Спустя 6 минут, 5 секунд (23.08.2010 - 11:30) lexu написал(а):
<form method="post">
<input
type="text" name="a" value="<? echo htmlspecialchars($a);?>" onfocus="this.value='';">
<input
type="submit" name="submit" />
</form>


<?
$a = !empty($_POST['a'])?$_POST['a']:null;
if (empty($_POST['submit']) || !is_numeric($a)) {
}
else {
echo "Прошол!";
}


Не работает smile.gif

Спустя 4 минуты, 8 секунд (23.08.2010 - 11:34) Basili4 написал(а):
Цитата (lexu @ 23.08.2010 - 12:30)
<?
$a = !empty($_POST['a'])?$_POST['a']:null;
if (empty($_POST['submit']) || !is_numeric($a))
{
}
else {
echo "Прошол!";
}


Ё мое.
Я этоти кусочек возьму окуратненько


if (!empty($_POST['a']) && is_numeric($_POST['a']))
echo "Прошол!";

вот как то так.






Спустя 4 минуты, 21 секунда (23.08.2010 - 11:38) lexu написал(а):
Не, не работает! smile.gif
0 не проходит!

Спустя 2 минуты, 59 секунд (23.08.2010 - 11:41) Basili4 написал(а):
<input type="text" name="a" value="<? echo htmlspecialchars($a);?>" onfocus="this.value='';">
тогда только одно убивай вот это onfocus="this.value='';"

Спустя 2 минуты, 33 секунды (23.08.2010 - 11:44) lexu написал(а):
не помогло.. дело не в onfocus="this.value='';

Спустя 3 минуты, 53 секунды (23.08.2010 - 11:48) Basili4 написал(а):
значит тогда так
echo empty($_POST['a'])?'Пустой':$a;

echo is_numeric($_POST['a']))?"Циферь $a": "Не циферь $a" ;

и что пишет

Спустя 4 минуты, 46 секунд (23.08.2010 - 11:52) waldicom написал(а):
Цитата (Basili4 @ 23.08.2010 - 10:48)
echo empty($_POST['a'])?'Пустой':$a;

Понятно, что он пишет "Пустой", потому что вот
А именно:
Цитата
Return Values

Returns FALSE if var has a non-empty and non-zero value.

The following things are considered to be empty:

    * "" (an empty string)
    * 0 (0 as an integer)
    * "0" (0 as a string)
    * NULL
    * FALSE
    * array() (an empty array)
    * var $var; (a variable declared, but without a value in a class)


Спустя 2 минуты, 52 секунды (23.08.2010 - 11:55) Basili4 написал(а):
waldicom
от это я гоню.... точно
if (isset($_POST['a']) && is_numeric($_POST['a']))
echo "Прошол!";

вот как надо

Спустя 1 минута, 5 секунд (23.08.2010 - 11:56) lexu написал(а):
ага, вижу дело не в is_numeric

Пустой Циферь smile.gif

Спустя 2 минуты, 1 секунда (23.08.2010 - 11:58) lexu написал(а):
но, isset так же считает 0 пустым

Спустя 49 секунд (23.08.2010 - 11:59) linker написал(а):
Блин, вот вы мучаетесь
<?
$a = isset($_POST['a'])?$_POST['a']:null;
if (isset($_POST['submit']) && is_numeric($a))
{
echo "Прошол!";
}
else
{
echo "Не прошол!";
}
?>

Спустя 2 минуты, 17 секунд (23.08.2010 - 12:02) lexu написал(а):
вот так работает:

<?
$a = $_POST['a'];
if (empty($_POST['submit']) || !is_numeric($a)) {
}
else{
echo $a;
}


ага, и как предыдущий!

Спустя 1 минута, 29 секунд (23.08.2010 - 12:03) lexu написал(а):
всем, огромное спасибо! smile.gif

Спустя 2 часа, 56 минут, 57 секунд (23.08.2010 - 15:00) Nikitian написал(а):
Ещё вариант:

if(intval($_POST['a'])==$_POST['a']){
//numeric
}
else{
//not numeric
}

Спустя 14 минут, 50 секунд (23.08.2010 - 15:15) Basili4 написал(а):
Nikitian
а если дробное ?

Спустя 1 час, 9 минут, 25 секунд (23.08.2010 - 16:24) Nikitian написал(а):
Basili4
А если ожидается дробное, то floatval()

Спустя 1 час, 5 минут, 48 секунд (23.08.2010 - 17:30) twin написал(а):
Нотис будет.

Спустя 36 минут, 55 секунд (23.08.2010 - 18:07) Семён написал(а):
Немножко опоздал держи:
if(ctype_digit($var)) echo 'Цифра';

Спустя 1 час, 11 минут, 35 секунд (23.08.2010 - 19:19) linker написал(а):
Семён
Обсуждалось, работает медленнее чем is_numeric()

Спустя 4 часа, 5 минут, 39 секунд (23.08.2010 - 23:24) Семён написал(а):
Цитата (linker @ 23.08.2010 - 20:19)
Семён
Обсуждалось, работает медленнее чем is_numeric()

Дело не в том, что быстрее, а где лучше и что использовать, в своих проектах я предпочитаю исключительно валидацию регулярками.
Спички не там пытаетесь экономить. (на счёт benchmark я бы не кидался сравнивать функции для разных задач, кстати на досуге сравни производительность, согласно php.net - обратно твоему утверждению)

Спустя 9 часов, 19 минут, 32 секунды (24.08.2010 - 08:44) linker написал(а):
Семён
Я же сказал, обсуждалось и на php.net отсылалось и бенчмарки делались. Сливает ctype, вот как не крути. Задача одна - является ли что-то набором цифирь.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.