Intereting Posts
Как отключить буферизацию вывода в PHP Как подождать перезагрузки страницы при тестировании интеграции Laravel PDO с Singleton не может получить доступ к частной собственности что такое «php: // input»? В основном это наблюдается в webservice Как установить один FK (внешний ключ) на несколько таблиц? Как мой подход к повторному использованию логики представления в моем проекте? Значение часового пояса Twitter и время создания_создания (utc time) для расчета того, в какой часовой пояс находится пользователь Неопределенное свойство: CI_Loader :: $ pagination XmlHTTPRequest: "Ошибка анализа XML: элемент не найден" Как просмотреть изображение за пределами веб-корня? Как просмотреть файлы каталога на другом сервере с помощью ssh2 Как запустить PHP-код, когда пользователь нажимает на ссылку? для каждого … break Запустите php foreach loop на многомерном массиве Создайте учетную запись электронной почты с PhP. С некоторыми вещами мне нужно работать

Значение поля PHP preg_match

Я хочу получить идентификатор или имя поля, которое продолжает изменять его значение.

Пример:

У меня есть эти поля в моей форме:

<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); 

Related of "Значение поля PHP preg_match"

Попробуй это:

 preg_match('/\bid\s*=\s*"(\d{5})"/', $html, $fieldId); 
  • Управляющая последовательность для границы слова – \b , а не \d .
  • Нет причин использовать группу захвата вокруг \b , так как она соответствует нулевой длине.
  • Вы не сопоставляли двойные кавычки вокруг идентификатора.
  • Вы можете использовать \d вместо [0-9] для сопоставления цифр.
  • После ID нет \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».