web-dev-qa-db-ja.com

.jpg、.png、または.gifで終わる有効なURLかどうかを確認する正規表現

ユーザーに有効なURLを送信してください。URLは.jpg、.png、または.gifで終わる画像でもあります。

30
Jim
(?:([^:/?#] +):)?(?://([^ /?#] *))?((^?#] * \。(?:jpg | gif | png) )(?:\?([^#] *))?(?:#(。*))?

これは RFC 2396 からの正規表現を解析する公式URIの(わずかに変更された)バージョンです。 #fragmentsおよび?querystringsは、ファイル名の後に表示されます。これは、必要な場合とそうでない場合があります。また、localhostを含む任意の有効なドメインと一致します。これも必要なものではない可能性がありますが、変更可能です。

これに対するより伝統的な正規表現は、次のようになります。

^ https?://(?:[a-z0-9 \-] + \。)+ [az] {2,6}(?:/ [^ /#?] +)+ \。(?:jpg | gif | png)$ 
 | --------ドメイン-------- ---パス--- |-拡張機能--- |

[〜#〜] edit [〜#〜]私の---(その他のコメント を参照してください。完全にこれと同じように、この場合はおそらくより便利だと思います。しかし、私はここにこれを残しています カルマ・ホーリング 完全性の理由。

69
Dan

実際に。

なぜURLをチェックしていますか?これは、取得しようとしているものがイメージであることを保証するものではなく、拒否するものがare n't imagesであることを保証するものでもありません。 HEADリクエストを実行してみて、それがどんなコンテンツタイプかを確認してください実際にです。

37
Dan

一般的に、独自の正規表現を使用してこれを行うのではなく、組み込みライブラリまたはフレームワーク関数を使用してURLを検証する方が適切です- を参照してくださいstringは、詳細については有効なURL です。

ただし、これを行うことに熱心な場合は、次の質問を確認してください。

URLの一部を取得する(正規表現)

次に、URLに満足したら(検証に使用した手段を問わず)、単純な "endswith"型の文字列演算子を使用して拡張子を確認するか、次のような単純な正規表現を使用します。

(?i)\.(jpg|png|gif)$
14
Blair Conrad
(http(s?):)|([/|.|\w|\s])*\.(?:jpg|gif|png)

これにより、この文字列のすべての画像が一致します。

background: rgb(255, 0, 0) url(../res/img/temp/634043/original/cc3d8715eed0c.jpg) repeat fixed left top; cursor: auto;
<div id="divbg" style="background-color:#ff0000"><img id="bg" src="../res/img/temp/634043/original/cc3d8715eed0c.jpg" width="100%" height="100%" /></div>
background-image: url(../res/img/temp/634043/original/cc3d8715eed0c.png);
background: rgb(255, 0, 0) url(http://google.com/res/../img/temp/634043/original/cc3    _d8715eed0c.jpg) repeat fixed left top; cursor: auto;
background: rgb(255, 0, 0) url(https://google.com/res/../img/temp/634043/original/cc3_d8715eed0c.jpg) repeat fixed left top; cursor: auto;

ここで正規表現をテストします: https://regex101.com/r/l2Zt7S/1

13
FDisk

本当に確認したい場合は、指定されたURLの最初の1キロバイトまたは2バイトを取得するだけで、画像について知る必要があるすべてを判断できます。

ここに その情報を取得する方法の例 、Pythonを使用し、ここに 使用するようにされた例、Djangoフォームフィールドとして これにより、URLを指定すると、画像の存在、ファイルサイズ、サイズ、フォーマットを簡単に検証できます。

2
Jonny Buchanan

(http(s?):)([/|.|\w|\s|-])*\.(?:jpg|gif|png)私にとって本当にうまくいった。

これは、次の形式のURLと一致します。

https://farm4.staticflickr.com/3894/15008518202_c265dfa55f_h.jpg
http://farm4.staticflickr.com/3894/15008518202_c265dfa55f_h.jpg
https://farm4.staticflickr.com/3894/15008518202-c265dfa55f-h.jpg
https://farm4.staticflickr.com/3894/15008518202.c265dfa55f.h.jpg
https://farm4.staticflickr.com/3894/15008518202_c265dfa55f_h.gif
http://farm4.staticflickr.com/3894/15008518202_c265dfa55f_h.gif
https://farm4.staticflickr.com/3894/15008518202-c265dfa55f-h.gif
https://farm4.staticflickr.com/3894/15008518202.c265dfa55f.h.gif
https://farm4.staticflickr.com/3894/15008518202_c265dfa55f_h.png
http://farm4.staticflickr.com/3894/15008518202_c265dfa55f_h.png
https://farm4.staticflickr.com/3894/15008518202-c265dfa55f-h.png
https://farm4.staticflickr.com/3894/15008518202.c265dfa55f.h.png

次のURLに対してこの正規表現を確認してください。 http://regexr.com/3g1v7

2
Blairg23

これがPerlの基本的な考え方です。味に塩。

#!/ usr/bin/Perl 
 
 use LWP :: UserAgent; 
 
 my $ ua = LWP :: UserAgent-> new ; 
 
 @ ARGV = qw(http://www.example.com/logo.png); 
 
 my $ response = $ ua-> head ($ ARGV [0]); 
 
 my($ class、$ type)= split m |/|、lc $ response-> content_type; 
 
 $ class eq 'image'; 
の場合、「It's an image!\ n」を出力します。

URLを調べる必要がある場合は、奇妙な状況をすべて自分で処理しようとするのではなく、堅実なライブラリを使用してください。

 use URI; 
 
 my $ uri = URI-> new($ ARGV [0]); 
 
 my $ last =($ uri-> path_segments)[-1]; 
 
 my($ extension)= $ last =〜m /\.([^.]+)$/ g; 
 
 print "私の拡張機能は$ extension\n"です; 

幸運を、 :)

2
brian d foy
^((http(s?)\:\/\/|~/|/)?([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.(jpg|png|gif))
1
Mark Cidade

この表現は、すべての画像URLに一致します-

^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+(?:png|jpg|jpeg|gif|svg)+$

例-

有効-

https://itelligencegroup.com/wp-content/usermedia/de_home_teaser-box_puzzle_in_the_Sun.png
http://sweetytextmessages.com/wp-content/uploads/2016/11/9-Happy-Monday-images.jpg
example.com/de_home_teaser-box_puzzle_in_the_Sun.png
www.example.com/de_home_teaser-box_puzzle_in_the_Sun.png
https://www.greetingseveryday.com/wp-content/uploads/2016/08/Happy-Independence-Day-Greetings-Cards-Pictures-in-Urdu-Marathi-1.jpg
http://thuglifememe.com/wp-content/uploads/2017/12/Top-Happy-tuesday-quotes-1.jpg
https://1.bp.blogspot.com/-ejYG9pr06O4/Wlhn48nx9cI/AAAAAAAAC7s/gAVN3tEV3NYiNPuE-Qpr05TpqLiG79tEQCLcBGAs/s1600/Republic-Day-2017-Wallpapers.jpg

無効-

https://www.example.com
http://www.example.com
www.example.com
example.com
http://blog.example.com
http://www.example.com/product
http://www.example.com/products?id=1&page=2
http://www.example.com#up
http://255.255.255.255
255.255.255.255
http://invalid.com/Perl.cgi?key= | http://web-site.com/cgi-bin/Perl.cgi?key1=value1&key2
http://www.siteabcd.com:8008
0
Tushar Walzade

参照:公式のgo langイメージライブラリドキュメントのDecodeConfigセクションを参照してください here

DecodeConfigを使用して画像の形式を取得し、jpeg、png、jpg、gifなどのconstタイプに対して検証できると信じています。

import (
  "encoding/base64"
  "fmt"
  "image"
  "log"
  "strings"
  "net/http"

  // Package image/jpeg is not used explicitly in the code below,
  // but is imported for its initialization side-effect, which allows
  // image.Decode to understand JPEG formatted images. Uncomment these
  // two lines to also understand GIF and PNG images:
  // _ "image/gif"
  // _ "image/png"
  _ "image/jpeg"
   )

func main() {
  resp, err := http.Get("http://i.imgur.com/Peq1U1u.jpg")
  if err != nil {
      log.Fatal(err)
  }
  defer resp.Body.Close()
  data, _, err := image.Decode(resp.Body)
  if err != nil {
      log.Fatal(err)
  }
  reader := base64.NewDecoder(base64.StdEncoding, strings.NewReader(data))
  config, format, err := image.DecodeConfig(reader)
  if err != nil {
      log.Fatal(err)
  }
  fmt.Println("Width:", config.Width, "Height:", config.Height, "Format:", format)
}

ここでの形式は、jpg、pngなどのファイル形式を示す文字列です

0
kevthanewversi

FastImage を使用します。URLから必要最小限のデータを取得して、画像であるかどうか、画像のタイプ、サイズを決定します。

0
dkam

Dan's Answerへの追加。

ドメインの代わりにIPアドレスがある場合。

正規表現を少し変更します。 (有効なIPv4およびIPv6の一時的なソリューション)

^https?://(?:[a-z0-9\-]+\.)+[a-z0-9]{2,6}(?:/[^/#?]+)+\.(?:jpg|gif|png)$

ただし、IPv4およびIPv6でサブネット範囲を検証するには、これを改善できます。

0
shyammakwana.me