PHP - 正则表达式检查<iframe>是否来自谷歌地图</iframe>

时间:2014-05-08 09:34:15

标签: php regex iframe

我试图验证来自用户的输入(是的,<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并且来自谷歌地图(在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!',
            ));
        }

这不起作用,它永远不会匹配(就像上面的输入一样)。有人能指出我做错了什么吗?感谢。

2 个答案:

答案 0 :(得分:3)

问题似乎来自正则表达式的这一部分

[^"]+">

这是在"然后">

之前说出任何内容

但是在你的例子中它有

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

哪个不匹配

你还需要逃避。因为这意味着任何角色而你错过了正则表达式中的三个www

答案 1 :(得分:0)

我使用了这个正则表达式:

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

它按预期工作。希望有所帮助。