PHP - регулярное выражение, чтобы проверить, <iframe> поставляется с Google Maps

62
2

Я пытаюсь проверить ввод данных от пользователя, такого как это (да, <iframe> - это вход):

<iframe src="https://www.google.com/maps/embed?pb=!1m14!1m12!1m3!1d7098.94326104394!2d78.0430654485247!3d27.172909818538997!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!5e0!3m2!1sen!2s!4v1385710909804" width="600" height="450" frameborder="0" style="border:0"></iframe>

Я использую это регулярное выражение, чтобы проверить, действительно ли вход является iframe AND, и поступает с такой карты (в php):

if (!preg_match('/<iframe[^>]*src="https:\/\/w.google.com\/maps\/[^"]+">\s*<\/iframe>/', $input)) {
return \Response::json(array(
'type' => 'danger',
'message' => 'Embedded map should be in iframe tags!',
));
}

Это не работает, оно никогда не совпадает со всем временем (например, вход сверху). Может кто-то указывает мне, что я делаю неправильно? Благодарю.

спросил(а) 2021-01-25T13:59:15+03:00 4 месяца, 4 недели назад
1
Решение
90

Проблема, похоже, связана с этой частью вашего регулярного выражения

[^"]+">

Это говорит что-то до тех пор, пока " затем не пройдет ">

Но в вашем примере это

sen!2s!4v1385710909804" width="600"

Которые не совпадают

Также вам нужно сбежать. поскольку это означает любой символ, и вы пропустили три www в своем регулярном выражении.

ответил(а) 2021-01-25T13:59:15+03:00 4 месяца, 4 недели назад
45

Я использовал это регулярное выражение:

<iframe\s*src="https:\/\/www\.google\.com\/maps\/embed\?[^"]+"*\s*[^>]+>*<\/iframe>

И он работает так, как ожидалось. Надеюсь, это поможет.

ответил(а) 2021-01-25T13:59:15+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема