[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с регуляркой
AllesKlar
Строка - поле input html

Места тегов могут быть произвольные. Т.е. сначала может идти name, потом value, может наоборот, может пробелов быть напихано.
В общем, нужно отловить name="_token" (могут быть пробелы до / после '=') и вытащить value (тоже могуть быть пробeлы до/после '=')

$data = '<input type="hidden" value="e2e8dab5bc08d331cfd2424115b590b5" name="_token">';
preg_match('/_token:\'([^\']+)\'/', $data, $match);
var_dump($match); // array (size=0) empty


_____________
[продано копирайтерам]
volter9
AllesKlar
Можно типа так:
http://rubular.com/r/qsFHjier7l

Только одна из групп может быть пустой. По этому:
function get_csrf_token ($html) {
preg_match('/<input[^>]*(?:name\s*=\s*"_token"\s+value\s*=\s*\"([^"]+)\"|value=\"([^"]+)\"\s+name\s*=\s*"_token")[^>]*>/mu', $html, $matches);

array_shift($matches);

foreach ($matches as $match) {
if (!empty($match)) return $match;
}

return false;
}

$html = '<input type="hidden" name = "_token" value = "5434a91b0fe6ccb114493ff319347844">';

echo get_csrf_token($html);


UPD: Теперь точно все

_____________
Мой блог
AllesKlar
volter9
не работает
$html = '<input        value="5434a91b0fe6ccb114493ff319347844"                type="hidden" name="_token"              >';


И если кавычки будут одинарные, тоже не работает :(

_____________
[продано копирайтерам]
volter9
AllesKlar
Если строка содержит только input тег:
Цитата (AllesKlar @ 30.03.2015 - 23:14)
Строка - поле input html

То можно вот так:
http://rubular.com/r/lIMBjv4VYN
function get_csrf_token ($html) {
preg_match('/name\s*=\s*(?:"|\')_token(?:"|\')[^>]+value\s*=\s*(?:"|\')([^"]+)(?:"|\')|value\s*=\s*(?:"|\')([^"]+)(?:"|\')[^>]+name\s*=\s*(?:"|\')_token(?:"|\')/mu', $html, $matches);

array_shift($matches);

foreach ($matches as $match) {
if (!empty($match)) return $match;
}

return false;
}

$html = '<input value="5434a91b0fe6ccb114493ff319347844" type="hidden" name="_token" >';

echo get_csrf_token($html);


_____________
Мой блог
AllesKlar
volter9
Зачет smile.gif

_____________
[продано копирайтерам]
killer8080
$data = '
<input type="hidden" value="e2e8dab5bc08d331cfd2424115b590b5" name="_token">
<input type="hidden" name="_token" value="anotherheash">
<input type="hidden" name="_token" required value="with attr betwenn">
'
;

preg_match_all('#<input[^>]*(name=[\'"]_token[\'"][^>]+value=[\'"](?<val1>.*)[\'"]|value="(?<val2>.*)"[^>]+name="_token")[^>]*>#iUs', $data, $matches);
$result = array_filter(array_merge($matches['val1'], $matches['val2']));
echo '<pre>'.print_r($result, 1).'</pre>';

вижу уже ответили, ну все равно уже накидал не пропадать же user posted image
Быстрый ответ:

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