За последние 24 часа нас посетили 20284 программиста и 1702 робота. Сейчас ищут 1888 программистов ...

Помогите с условием "если только цыфры"

Тема в разделе "Регулярные выражения", создана пользователем Panter7777, 20 дек 2010.

  1. Panter7777

    Panter7777 Активный пользователь

    С нами с:
    10 окт 2010
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Киев
    Добрый день!

    Мне нужно создать такое условие "Если в переменной только цыфры то..." если что-то ждругое то...

    Передаю через форму редактирования цыфровое значение (при условии что ячейка пуста), а заполняется она из базы, а если ячейка заполнена, то оставляй такой как есть.



    вот что я сделал:
    Код (Text):
    1.  
    2.  
    3. function fDevise ($data)
    4. {
    5. //$devise = '';
    6. if ($data == 1){$devise = 'Свитч';}
    7. if ($data == 2){$devise = 'ИБП';}
    8. if ($data == 3){$devise = 'Деглюкатор';}
    9. if ($data == 4){$devise = 'MiniGBIC';}
    10. if ($data == 5){$devise = 'Пачкорд';}
    11. if ($data == 6){$devise = 'Кабель';}
    12. return $devise;
    13. }
    14.  
    15.  
    16. f ($devise != mb_ereg("[0-9]{1,2}", $devise)) {$devise = $_POST['devise'];}
    17. else {$devise = fDevise($devise);}
    Почему-то работает как-то не понятно,
    Переменная должна, если цыфры - стать словом, но вот результат :

    $devise=2; $_POST['devise']=2 fDevise($devise)=ИБП;

    Тоесть мое условие не срабатывает(((( так как $devise=2; , а должно быть $devise=ИБП;
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Запутались в $_POST. Откуда $device берется в mb_ereg и второй ветке условия?

    P.S. use preg_match
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.119
    Симпатии:
    1.245
    Адрес:
    там-сям
    ereg* устаревшие функции, используй preg, а в данном случае проще
    PHP:
    1.  
    2. if (strspn($s, '0123456789') == strlen($s)) echo 'Yes';
    3. else echo 'No';
    4.  
    а может быть тебя устроит is_numeric()
     
  4. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    function fDevise ($data)
    {
    //$devise = '';
    if ($data == 1){$devise = 'Свитч';}
    if ($data == 2){$devise = 'ИБП';}
    if ($data == 3){$devise = 'Деглюкатор';}
    if ($data == 4){$devise = 'MiniGBIC';}
    if ($data == 5){$devise = 'Пачкорд';}
    if ($data == 6){$devise = 'Кабель';}
    return $devise;
    }


    if ($devise != preg_match("/[0-9]{1,2}/", $devise)) {$devise = $_POST['devise'];}
    else {$devise = fDevise($devise);}
     
  5. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Возможно придется выставить локаль .

    По крайней меру у меня на хостинге для работы с русскими буквами надо !

    setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
     
  6. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Объясните мне, недалёкому, почему РНР-программисты так любят сочинять узоры из ифов?

    Код в принципе лучше переписать.

    if ($devise != preg_match("/[0-9]{1,2}/", $devise))
    это условие не сработает так как допущена целая куча ошибок:

    1. devise не определена
    2. preg_match возвращает 0 или 1 (найдено или не найдено). Вы же умудрились сравнить булев тип с самим значением переменной. Одному только Богу известно, что вернёт в итоге такая конструкция (это код из серии #define true false).
    3. Сравнение лучше провести внутри функции.

    Я так понял вам это надо:
    PHP:
    1. <?php
    2. function test($data)
    3. {
    4.   if ($data == 2){return 'ИБП';}
    5.   if ($data == 3){return 'Деглюкатор';}
    6.   if ($data == 4){return 'MiniGBIC';}
    7.   if ($data == 5){return 'Пачкорд';}
    8.   if ($data == 6){return 'Кабель';}
    9.   return $data;
    10. }
    11. echo test(2), "\n", test(0), "\n", test(100);
    12. /*
    13. ИБП
    14. 0
    15. 100
    16. */
    Индусятину с ифами не переписываю так как лень:)

    P. S. К. О. также напоминает, Devise - это завещание