3

そのリンクがGoogleマップのリンクかどうかを確認したいだけです

例えば ​​:

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/+"
    ];

私は正規表現が苦手で、JavaScript 正規表現ジェネレーターを使用しようとしましたが、それでも私には難しいです。

私はただ..

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} はどうですか?

この方法でGoogleマップのURLとURLを検証したいだけです(写真を見てください)

ここに画像の説明を入力

可能であれば、住所または緯度経度が設定されているかどうかを検証したい (liまたはqパラメーター チェックを使用しますか?) (たとえば、「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

テストデータで機能する簡単な正規表現は次のとおりです。

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

ただし、おそらく一歩下がって、自分がやろうとしていることについてもっと考える必要があります。ここには2つの別々の問題があります。

  • 何かが有効なURLであることを確認します(例の1つが無効なURLであるため、これを行う必要があると思います)。
  • URLがGoogleマップのURLであることを確認します。

堅牢なソリューションが必要な場合は、2段階のプロセスで実行することをお勧めします。最初にURLが有効であることを確認してから、それがGoogleマップのURLであるかどうかを確認します。

最初の部分はそれ自体が非常に複雑ですが、他の多くの人が以前にそれに取り組んできました。「JavascriptURL検証」を検索すると、多くの質問と提案された回答が表示されます。私はこれを出発点として提案しますが、Javascriptでこれを行う個人的な経験はありません。

2番目の部分では、GoogleマップのURLがどのように見えるかを正確に判断する必要があります。上記でいくつかの例を示しましたが、それらは明らかに可能性のサブセットです。どれだけ徹底的になりたいですか?また、パラメータも有効であることを確認する必要がありますか?これは大きな作業になる可能性があります。

于 2013-02-06T12:57:28.663 に答える
2
(https|http)://(www\.|)google\.[a-z]+/maps

->スラッシュ付き:/(https|http):\/\/(www\.|)google\.[a-z]+\/maps/

その正規表現は悪いURLではなく良いURLのみを選択しますが、enny\GET変数はチェックしません

http://regexpal.com/またはここhttp://jsbin.com/onuyux/4でテストできます。

文字列の先頭かどうかをテストするために、前に^を追加できます

于 2013-02-06T12:38:38.537 に答える
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 に答える
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 パラメーターの少なくとも 1 つを含む任意の 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=[^&]+)+($|&)/;

EDIT2

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=[^&]+)+($|&)/;

これですべての URL がカバーされることを願っています。

于 2013-02-12T14:36:55.490 に答える