ユーザーに有効なURLを送信してください。URLは.jpg、.png、または.gifで終わる画像でもあります。
(?:([^:/?#] +):)?(?://([^ /?#] *))?((^?#] * \。(?:jpg | gif | png) )(?:\?([^#] *))?(?:#(。*))?
これは RFC 2396 からの正規表現を解析する公式URIの(わずかに変更された)バージョンです。 #fragments
および?querystrings
は、ファイル名の後に表示されます。これは、必要な場合とそうでない場合があります。また、localhost
を含む任意の有効なドメインと一致します。これも必要なものではない可能性がありますが、変更可能です。
これに対するより伝統的な正規表現は、次のようになります。
^ https?://(?:[a-z0-9 \-] + \。)+ [az] {2,6}(?:/ [^ /#?] +)+ \。(?:jpg | gif | png)$ | --------ドメイン-------- ---パス--- |-拡張機能--- |
[〜#〜] edit [〜#〜]私の---(その他のコメント を参照してください。完全にこれと同じように、この場合はおそらくより便利だと思います。しかし、私はここにこれを残しています カルマ・ホーリング 完全性の理由。
実際に。
なぜURLをチェックしていますか?これは、取得しようとしているものがイメージであることを保証するものではなく、拒否するものがare n't imagesであることを保証するものでもありません。 HEADリクエストを実行してみて、それがどんなコンテンツタイプかを確認してください実際にです。
一般的に、独自の正規表現を使用してこれを行うのではなく、組み込みライブラリまたはフレームワーク関数を使用してURLを検証する方が適切です- を参照してくださいstringは、詳細については有効なURL です。
ただし、これを行うことに熱心な場合は、次の質問を確認してください。
次に、URLに満足したら(検証に使用した手段を問わず)、単純な "endswith"型の文字列演算子を使用して拡張子を確認するか、次のような単純な正規表現を使用します。
(?i)\.(jpg|png|gif)$
(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
本当に確認したい場合は、指定されたURLの最初の1キロバイトまたは2バイトを取得するだけで、画像について知る必要があるすべてを判断できます。
ここに その情報を取得する方法の例 、Pythonを使用し、ここに 使用するようにされた例、Djangoフォームフィールドとして これにより、URLを指定すると、画像の存在、ファイルサイズ、サイズ、フォーマットを簡単に検証できます。
(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
これが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"です;
幸運を、 :)
^((http(s?)\:\/\/|~/|/)?([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.(jpg|png|gif))
この表現は、すべての画像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
参照:公式の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などのファイル形式を示す文字列です
FastImage を使用します。URLから必要最小限のデータを取得して、画像であるかどうか、画像のタイプ、サイズを決定します。
Dan's Answerへの追加。
正規表現を少し変更します。 (有効なIPv4およびIPv6の一時的なソリューション)
^https?://(?:[a-z0-9\-]+\.)+[a-z0-9]{2,6}(?:/[^/#?]+)+\.(?:jpg|gif|png)$
ただし、IPv4およびIPv6でサブネット範囲を検証するには、これを改善できます。