我试图验证来自用户的输入(是的,<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!',
));
}
这不起作用,它永远不会匹配(就像上面的输入一样)。有人能指出我做错了什么吗?感谢。
答案 0 :(得分:3)
问题似乎来自正则表达式的这一部分
[^"]+">
这是在"
然后">
但是在你的例子中它有
sen!2s!4v1385710909804" width="600"
哪个不匹配
你还需要逃避。因为这意味着任何角色而你错过了正则表达式中的三个www
。
答案 1 :(得分:0)
我使用了这个正则表达式:
<iframe\s*src="https:\/\/www\.google\.com\/maps\/embed\?[^"]+"*\s*[^>]+>*<\/iframe>
它按预期工作。希望有所帮助。