Вырезать из переменной всё, кроме цифр

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

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Raccoon

    Raccoon

    Регистр.:
    31 июл 2007
    Сообщения:
    172
    Симпатии:
    9
    Добрый день! Такой вопрос, есть переменная $id, в которой передаётся id материала. В целях безопасности необходимо вырезать всё, кроме цифр. В регулярных выражениях не силен, поэтому спрашиваю как это сделать. Спасибо.
     
  2. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    А может не стоит просто вырезать цифры, а проверить на возможность приведения переменной к нужному типу? Ведь если var=2 корректно, то выдирание цифр из var=hacker233 вряд ли будет верным результатом.
    http://doc.dubs.odessa.net/phpdoc/function.is-int.php
     
  3. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    Код:
    $id = preg_replace('/\D/', '', $id);
    
    но вообще я согласен с antidote, да и быстрее приведение типов чем regexp
     
  4. Raccoon

    Raccoon

    Регистр.:
    31 июл 2007
    Сообщения:
    172
    Симпатии:
    9
    Т.е.если is_numeric($id) возвращает 'False' тогда выдаём die('Ошибка'); или делаем $id = preg_replace('/\D/', '', $id);?
     
  5. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    Лучше принять решение о том, что неверно. А то действия скрипта могут быть разными. Лучше попросить ввести данные еще раз чем потом разбираться что и где глючит.
     
  6. black.cat

    black.cat

    Регистр.:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    32
    +1 за отсутствие необъодимости чтото вырезать.
    regexp в этом случае микроскоп а переменная - гвоздь.
    делайте
    PHP:
    settype($id,"integer");
    проверки делать тоже избыточно - зачем сообщать о ошибке человеку который явно пытается всунуть некорректные данные.
    settype быстро сделает или ноль или вернет число.
     
  7. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    не совсем согласен. если $id может иметь значение 0, то settype тут не является корректным.

    UPD к тому же
    http://php.net/manual/en/function.settype.php смотри в examle
    PHP:
    <?php
    $foo 
    "5bar"// string
    settype($foo"integer"); // $foo is now 5   (integer)
    ?>
    В $foo запишется 5. Это как раз то, чего хотел ТС!
     
    Raccoon нравится это.
  8. Raccoon

    Raccoon

    Регистр.:
    31 июл 2007
    Сообщения:
    172
    Симпатии:
    9
    Да! Спасибо!
     
  9. maserg

    maserg Создатель

    Регистр.:
    2 окт 2006
    Сообщения:
    28
    Симпатии:
    2
    может просто intval() ?
     
  10. Speedbird

    Speedbird Писатель

    Регистр.:
    23 май 2009
    Сообщения:
    2
    Симпатии:
    0
    $id += 0;
    если в $id число - то оно не изменится. иначе в общем случае будет 0
     
Статус темы:
Закрыта.