строчка в форме регистрации

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

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

    lungsmoney Постоялец

    Регистр.:
    25 апр 2008
    Сообщения:
    81
    Симпатии:
    23
    Есть такая строка в форме регистрации:
    PHP:
    <input type="hidden" name="id" value="16312829432661791899">
    Нужно вытащить значение 16312829432661791899
    Пытаюсь это сделать так:
    PHP:
    preg_match_all('#<input type="hidden" name="id" value="(.*?)">#is'$f$sor); 
    $z $sor[1];
    Уже как только над шаблоном не изголялся, все равно выдает:Array
    :mad:
    Ткните носом - в чем я туплю
     
  2. fangete

    fangete Постоялец

    Регистр.:
    2 ноя 2007
    Сообщения:
    144
    Симпатии:
    124
    Попробуйте вот так:
    $z = $sor[1][0];
    А вообще посмотрите на этот массив с помощью print_r - поймете его структуру
     
    lungsmoney нравится это.
  3. lungsmoney

    lungsmoney Постоялец

    Регистр.:
    25 апр 2008
    Сообщения:
    81
    Симпатии:
    23
    так пробовал. Не работает.
    PHP:
    $z $sor[1][0];
    подозреваю что трабла с
    PHP:
    (.*?)
    думаю нужно как-то изменить нутро, типа
    PHP:
    [1-0]
    Но в RegExps - нуб полный.
    print_r ,как и echo - выдает Array
    Причем
    PHP:
    var_dump($sorr[1][0]);
    выдает число, а сохранить его - ну никак не могу
     
  4. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
    PHP:
    preg_match('/<input[^>]+type="hidden"[^>]+name="id"[^>]+value="(\d+)">/is'$f$sor);
    рекомендую вначале выбирать все скрытые поля, после уже разбирать их, так как при перестановке аттрибутов местами регулярное выражение необходимо будет менять
     
    lungsmoney нравится это.
  5. satih

    satih

    Регистр.:
    19 сен 2008
    Сообщения:
    429
    Симпатии:
    710
    Код:
    value="(\d+)"
    можно, но часто там также буквы попадаются. пишу граббер, где в таком же поле есть буквы и цифры, у меня сработала такая версия:

    если ожидается только одно совпадение:
    Код:
    preg_match('#<input type="hidden" name="id" value="([^"]*)#', $f, $sor); 
    $z = $sor[1];
    если несколько, то:
    Код:
    preg_match_all('#<input type="hidden" name="id" value="([^"]*)#', $f, $sor);
    $z = $sor[1][0];
     
    lungsmoney нравится это.
  6. lungsmoney

    lungsmoney Постоялец

    Регистр.:
    25 апр 2008
    Сообщения:
    81
    Симпатии:
    23
    Для себя подобрал такую вот схему
    PHP:
    preg_match_all('#<input type="hidden" name="id" value="(\d{18,20})">#i'
    и тд
    работает,аж уши заворачиваются:yahoo:

    Топик далее не актуален.
    Спасибо всем за участие в решении проблемы.
     
  7. zzxc

    zzxc Создатель

    Регистр.:
    27 дек 2007
    Сообщения:
    10
    Симпатии:
    3
    Вам нужен preg_match вместо preg_match_all.
    preg_match_all выдает массив в качесте $sor[1], это его правильное поведение. Значение hidden'а выможете получить как $sor[1][0], ну а в $sor[1][1] - значение второго hidden'а, если такой есть.
    Ещё можно на всякий случай регулярку написать как
    PHP:
    '#<input type="hidden" name="id" value="([^"]*)">#i'
    Так гарантированно получите значение hidden'а, что бы в нем ни было (кроме переносов строк, наверное).
     
Статус темы:
Закрыта.