Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS$SCELegate RegExp:将类似域列入白名单时遇到问题?_Javascript_Regex_Angularjs_Iframe - Fatal编程技术网

Javascript AngularJS$SCELegate RegExp:将类似域列入白名单时遇到问题?

Javascript AngularJS$SCELegate RegExp:将类似域列入白名单时遇到问题?,javascript,regex,angularjs,iframe,Javascript,Regex,Angularjs,Iframe,我需要将一些url作为{{{vars}}传递给一些iframesrc,并将其列为白名单 域名包括: 1 : http://chateauversailles.fr 2 : http://www.chateauversailles-spectacles.fr/ 这适用于所有#1 URL: 只要我在域2上尝试sames规则: 它会中断所有iFrame src,包括带有常见$sce错误的域#1调用:[$sce:insteUrl]阻止从url加载资源$SCEDegate策略不允许的资源 如果我尝

我需要将一些url作为
{{{vars}}
传递给一些iframe
src
,并将其列为白名单

域名包括:

1 : http://chateauversailles.fr
2 : http://www.chateauversailles-spectacles.fr/

这适用于所有#1 URL:


只要我在域2上尝试sames规则:

它会中断所有iFrame src,包括带有常见$sce错误的域#1调用:
[$sce:insteUrl]阻止从url加载资源$SCEDegate策略不允许的资源


如果我尝试将语句#2放在#1之前,则域#1 URL将被列入白名单,而不是#2

我怀疑罪魁祸首是Regexp,但它们对我来说似乎很好,但显然不够$sce。

您可以使用可选组将两个语句“合并”为一个语句:

$sceDelegateProvider.resourceUrlWhitelist(['self', new RegExp('^(https?):\\/\\/(w{3}\\.)?chateauversailles(-spectacles)?\\.fr/.+$')]);
请注意,在使用RegExp构造函数时需要使用双转义

正则表达式解释

  • ^
    -字符串锚的开始
  • (https?
    )-与
    http
    https
    匹配的捕获组(注意,如果不使用反向引用,可以删除圆括号)
  • :\\/\\/
    -逐字匹配
    :/
    (注意,您不必在构造函数中转义斜杠,因为它不允许使用分隔符,因此您可以编写
    :/
  • (w{3}\\)?
    -一个可选的捕获组(因为
    量词),它与字母
    w
    匹配,正好有3次出现和一个文字点
  • 凡尔赛城堡
    -与指定的字母顺序匹配1次
  • (-bitches)?
    -与
    -bitches
    匹配的可选组,或者由于
    量词而不匹配
  • \\.fr/
    -按字面意思匹配
    .fr/
  • +
    -匹配除换行符以外的任何一个或多个字符
  • $
    -字符串结束

Try
$sceDelegateProvider.resourceUrlWhitelist(['self',new RegExp('^(https?:\\/\\\\/\\\/(w{3}\\\\)?凡尔赛城堡(-cogits)?\\\.fr/+$))作为一条语句。@Stribizev-就是这个。非常感谢。请把你的评论变成一个答案,这样我可以投票给你。很高兴它对你有用。这是一个非常好的详细答案。一个很好的正则表达式教程。
$sceDelegateProvider.resourceUrlWhitelist(['self', new RegExp('^(http[s]?):\/\/(w{3}.)?chateauversailles\.fr/.+$')]);
$sceDelegateProvider.resourceUrlWhitelist(['self', new RegExp('^(http[s]?):\/\/(w{3}.)?chateauversailles\-spectacles\.fr/.+$')]);
$sceDelegateProvider.resourceUrlWhitelist(['self', new RegExp('^(https?):\\/\\/(w{3}\\.)?chateauversailles(-spectacles)?\\.fr/.+$')]);