Я хочу получить идентификатор или имя поля, которое продолжает изменять его значение.
Пример:
У меня есть эти поля в моей форме:
<input type="text" id="94245" name="94245" value=""> <input type="text" id="name" name="name" value=""> <input type="text" id="status" name="status" value="">
И я хочу получить идентификатор или имя первого поля, но он продолжает меняться, например:
<input type="text" id="52644" name="52644" value=""> <input type="text" id="44231" name="44231" value=""> <input type="text" id="94831" name="94831" value="">
Шаблон – это всегда 5-значное значение.
Я пробовал это, но не добился успеха:
preg_match('/(\d)id=\s*([0-9]{5})\s*(\d+)/', $html, $fieldId);
Попробуй это:
preg_match('/\bid\s*=\s*"(\d{5})"/', $html, $fieldId);
\b
, а не \d
. \b
, так как она соответствует нулевой длине. \d
вместо [0-9]
для сопоставления цифр. \d+
, я не знаю, для чего это нужно в вашем регулярном выражении. Кажется, вы просто опустили кавычки. В противном случае ваше регулярное выражение будет звуковым. Вы можете захотеть поместить \ s вокруг знака равенства, на всякий случай:
if (preg_match('/\\s*name\\s*=\\s*"([0-9]{5})"/', $html, $gregs)) { $fieldId = $gregs[1]; }
Как вы можете видеть, я также изменил искомый атрибут от id
до name
. В вашем примере они равны, но отправляемое значение будет указано по name
.
Если эта стратегия array_map
применяется для большего количества полей, вы можете сначала получить массив полей, ища «] *>» (хотя вам не следует анализировать HTML с регулярным выражением ), а затем используйте array_map
для извлеките каждый из них в строку с именем тега.
Вы можете использовать грубую силу. Следующий файл numeric_name1.php отправляет форму, в которой первое поле имеет числовое имя. Второй файл numeric_name2.php выполняет итерацию всех номеров до тех пор, пока не найдет тот, который существует в $ _POST. Вот они:
numeric_name1.php
<html> <body> <form method="post" action="numeric_name2.php"> <input type="text" id="94245" name="94245" value="" /> <input type="text" id="name" name="name" value="" /> <input type="text" id="status" name="status" value="" /> <input type="submit" value="Submit this form"/> </form> </body> </html>
numeric_name2.php
<?php for ( $i = 0; $i < 99999; $i++ ) // TRY ALL NUMBERS WITH 5 DIGITS. { $num = sprintf( "%05d",$i ); // EXPAND $I TO A STRING WITH 5 DIGITS. if ( isSet( $_POST[ $num ] ) ) // IF THIS NUMERIC NAME EXISTS... { echo "The name is = " . $num; break; // STOP WHEN FOUND. } } ?>
Чтобы проверить этот код, создайте два текстовых файла, используйте указанные имена, скопируйте код, откройте свой браузер и запустите «localhost / numeric_name1.php».