3

我只想检查该链接是否是 Google Maps 链接

例如 :

var urls =[
    /// correct urls
    "https://www.google.com/maps",
    "https://www.google.fr/maps",
    "https://google.fr/maps",
    "http://google.fr/maps",
    "https://www.google.de/maps",
    "https://www.google.com/maps?ll=37.0625,-95.677068&spn=45.197878,93.076172&t=h&z=4",
    "https://www.google.de/maps?ll=37.0625,-95.677068&spn=45.197878,93.076172&t=h&z=4",
    "https://www.google.com/maps?ll=37.0625,-95.677068&spn=45.197878,93.076172&t=h&z=4&layer=t&lci=com.panoramio.all,com.google.webcams,weather",
    "https://www.google.com/maps?ll=37.370157,0.615234&spn=45.047033,93.076172&t=m&z=4&layer=t",

    "https://www.google.com/maps?ll=37.0625,-95.677068&spn=45.197878,93.076172&t=h&z=4",
    "https://www.google.de/maps?ll=37.0625,-95.677068&spn=45.197878,93.076172&t=h&z=4",
    "https://www.google.com/maps?ll=37.0625,-95.677068&spn=45.197878,93.076172&t=h&z=4&layer=t&lci=com.panoramio.all,com.google.webcams,weather",
    "https://www.google.com/maps?ll=37.370157,0.615234&spn=45.047033,93.076172&t=m&z=4&layer=t",

    /// error urls
    "https://www.google.com/",
    "https://zzz.google.com/maps",
    "https://www.google.com/+",
    "httpsxyz://www.google.com/maps",
    "http://www.anotherdomain.com/+"
    ];

我对 Regex 很不满意,并尝试使用 JavaScript Regex Generator,但对我来说仍然很难。

我只有..

Reg = /^http\:\/\/|https\:\/\/|www\.google$/;

它失败了!:(

但我为大家做了一个现场测试:http: //jsbin.com/onuyux/1/edit ?javascript,live


编辑:2

在我得到@joel harkes&的帮助后,我得到@dan1111了正则表达式

/^https?\:\/\/(www\.)?google\.[a-z]+\/maps\b/

这是正则表达式,google.{TLD}/maps那么 maps.google.{TLD} 呢?

我只是想通过这种方式验证谷歌地图的网址和网址(看图)

在此处输入图像描述

如果可能,我想验证是否设置了地址或经纬度(使用liq参数检查?)(例如,不仅是“maps.google.com”..)

更新列表+代码:

/// correct urls
"https://www.google.com/maps?ll=37.0625,-95.677068&spn=45.197878,93.076172&t=h&z=4",
"https://www.google.de/maps?ll=37.0625,-95.677068&spn=45.197878,93.076172&t=h&z=4",
"https://www.google.com/maps?ll=37.0625,-95.677068&spn=45.197878,93.076172&t=h&z=4&layer=t&lci=com.panoramio.all,com.google.webcams,weather",
"https://www.google.com/maps?ll=37.370157,0.615234&spn=45.047033,93.076172&t=m&z=4&layer=t",
"https://maps.google.com/maps?q=New+York,+NY,+USA&hl=no&sll=19.808054,-63.720703&sspn=54.337928,93.076172&oq=n&hnear=New+York&t=m&z=10",
"https://www.google.com/maps?q=New+York,+New+York,+USA&hl=no&ll=40.683762,-73.925629&spn=0.708146,1.454315&sll=41.47566,-72.026367&sspn=11.190693,23.269043&oq=new&hnear=New+York&t=m&z=10",

/// error urls
"https://www.google.com/",
"https://zzz.google.com/maps",
"https://www.google.com/+",
"httpsxyz://www.google.com/maps",
"http://www.anotherdomain.com/+",
"http://maps.google.com/",
"http://google.com/maps",
"http://google.de/maps",
"?q=New+York,+New+York,+USA&hl=no&ll=40.683762,-73.925629&spn=0.708146,1.454315&sll=41.47566,-72.026367&sspn=11.190693,23.269043&oq=new&hnear=New+York&t=m&z=10",
"&sll=41.47566,-72.026367&sspn=11.190693,23.269043&oq=new&hnear=New+York&t=m&z=10"

现场测试: http: //jsbin.com/onuyux/25/edit ?javascript,live

4

4 回答 4

2
(https|http)://(www\.|)google\.[a-z]+/maps

-> 带斜线:/(https|http):\/\/(www\.|)google\.[a-z]+\/maps/

该正则表达式只选择好的网址而不是坏的,但不检查 enny \GET 变量

您可以在以下位置进行测试:http ://regexpal.com/或此处http://jsbin.com/onuyux/4

您可以在前面添加 ^ 以测试它是否是字符串的开头

于 2013-02-06T12:38:38.537 回答
2

这是一个简单的正则表达式,可用于您的测试数据:

Reg = /^https?\:\/\/(www\.)?google\.(com|fr|de)\/maps\b/;

但是,您可能应该退后一步,更多地考虑您正在尝试做的事情。你在这里有两个不同的问题:

  • 验证某些东西是有效的 URL(我假设您需要这样做,因为您的示例之一是无效的 URL)。
  • 验证 URL 是否为 Google 地图 URL。

如果您想要一个强大的解决方案,我建议您分两步进行。首先确定该 URL 是否有效,然后查看它是否为 Google Maps URL。

第一部分本身就相当复杂,但许多其他部分之前已经解决了它。如果您搜索“Javascript URL 验证”,您会看到许多问题和许多建议的答案。我建议将此作为一个起点,但我没有任何在 Javascript 中执行此操作的个人经验。

对于第二部分,您必须准确确定 Google 地图 URL 的外观。您在上面给出了一些示例,但它们显然是可能性的一个子集。你想做到多详尽?您是否也需要验证参数是否有效?这可能是一项艰巨的任务。

于 2013-02-06T12:57:28.663 回答
2

完成dan1111的答案是一个模式,它将匹配指定的域并检查是否设置了 ll GET 变量:

Reg = /^https?\:\/\/(www\.)?google\.[a-z]+\/maps\/?\?([^&]+&)*(ll=-?[0-9]{1,2}\.[0-9]+,-?[0-9]{1,2}\.[0-9]+|q=[^&+])+($|&)/;

我无法测试它(jsbin 已关闭),但它应该匹配任何包含至少一个 ll 或 q 参数的 url。

编辑

我添加了地图。子域并修复了一个小错字。之后应该q=+字符类之外,让它重复:q=[^&]+而不是q=[^&+]. 话虽如此,这是您的正则表达式:

Reg = /^https?\:\/\/(www\.|maps\.)?google\.[a-z]+\/maps\/?\?([^&]+&)*(ll=-?[0-9]{1,2}\.[0-9]+,-?[0-9]{1,2}\.[0-9]+|q=[^&]+)+($|&)/;

编辑2

要接受 google.co.uk 样式的域,请使用以下正则表达式。

Reg = /^https?\:\/\/(www\.|maps\.)?google(\.[a-z]+){1,2}\/maps\/?\?([^&]+&)*(ll=-?[0-9]{1,2}\.[0-9]+,-?[0-9]{1,2}\.[0-9]+|q=[^&]+)+($|&)/;

希望它现在能涵盖所有的网址。

于 2013-02-12T14:36:55.490 回答
2

这应该可以解决问题

Reg = /^https?\:\/\/((www|maps)\.)?google\.[a-z]+\/maps\/?\?([^&]+&)*(s?ll=-?[0-9]{1,2}\.[0-9]+,-?[0-9]{1,2}\.[0-9]+|q=[^&+])+($|&)/;

可以在http://jsbin.com/onuyux/36中测试

于 2013-02-14T06:49:08.117 回答