web-dev-qa-db-ja.com

URL検証の正規表現(JavaScript)

誰かがURLを検証するための正規表現を持っていますか(テキストパッセージ内でそれらを見つけるためではありません)? JavaScriptスニペットが推奨されます。

22
Marek Stój

実際のURL構文はかなり複雑で、正規表現で表現するのは簡単ではありません。単純に見える正規表現のほとんどは、多くの偽陰性と偽陽性をもたらします。娯楽については これらの努力 を参照してください。しかし、最終結果でさえ良くありません。

さらに、最近では、一般的にIRIと旧式のURIを許可する必要があるため、次のような有効なアドレスにリンクできます。

http://en.wikipedia.org/wiki/Þ
http://例え.テスト/

私は単純なチェックだけに行きます:それは既知の良い方法で始まりますか:名前?スペースや二重引用符はありませんか?もしそうなら、地獄、それはおそらく十分です。

27
bobince

受け入れられた答えbobince で正しい:スキーム名、://、およびスペースと二重引用符のみを検証すれば通常は十分です。 JavaScriptで検証を実装する方法は次のとおりです。

var url = 'http://www.google.com';
var valid = /^(ftp|http|https):\/\/[^ "]+$/.test(url);
// true

または

var r = /^(ftp|http|https):\/\/[^ "]+$/;
r.test('http://www.goo le.com');
// false

または

var url = 'http:www.google.com';
var r = new RegExp('/^(ftp|http|https):\/\/[^ "]+$/');
r.test(url);
// false

構文のリファレンス:

50
Akseli Palén

この正規表現を試してください

/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/

私には最適です。

16
Musaddiq Khan

私はこれでいくつかの成功を見つけました:

/^((ftp|http|https):\/\/)?www\.([A-z]+)\.([A-z]{2,})/
  • 次のいずれかをチェックします:ftp://、http://、またはhttps://
  • Wwwが必要です。
  • 任意の数の有効な文字をチェックします。
  • 最後に、ドメインがあり、そのドメインが少なくとも2文字であることを確認します。

それは明らかに完璧ではありませんが、私のケースをかなりうまく処理しました

5
Joey
<html>
<head>
<title>URL</title>
<script type="text/javascript">
    function validate() {
        var url = document.getElementById("url").value;
        var pattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
        if (pattern.test(url)) {
            alert("Url is valid");
            return true;
        } 
            alert("Url is not valid!");
            return false;

    }
</script>

</head>
<body>
URL :
<input type="text" name="url" id="url" />
<input type="submit" value="Check" onclick="validate();" />
</body>
</html>
3
Viet Nam

これを試してください 正規表現 、それは私のために機能します:

function isUrl(s) {
    var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
    return regexp.test(s);
}
1
ennuikiller

URL検証には/ ^ [a-z] +:[^:] + $/i正規表現を使用します。クロスブラウザ InputKeyFilter URL検証付きのコードの例を参照してください。

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Input Key Filter Test</title>
        <meta name="author" content="Andrej Hristoliubov [email protected]">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        
        <!-- For compatibility of IE browser with audio element in the beep() function.
        https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->
        <meta http-equiv="X-UA-Compatible" content="IE=9"/>
        
        <link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css">           
        <script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>
        <script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>
        
</head>
<body>
URL: 
<input type="url" id="Url" value=":"/>
<script>
        CreateUrlFilter("Url", function(event){//onChange event
                        inputKeyFilter.RemoveMyTooltip();
                        var elementNewInteger = document.getElementById("NewUrl");
                        elementNewInteger.innerHTML = this.value;
                }
                
                //onblur event. Use this function if you want set focus to the input element again if input value is NaN. (empty or invalid)
                , function(event){ this.ikf.customFilter(this); }
        );
</script>
 New URL: <span id="NewUrl"></span>

</body>
</html>

私のページも参照してください 入力キーフィルターの例

1
Andrej
/(?:http[s]?\/\/)?(?:[\w\-]+(?::[\w\-]+)?@)?(?:[\w\-]+\.)+(?:[a-z]{2,4})(?::[0-9]+)?(?:\/[\w\-\.%]+)*(?:\?(?:[\w\-\.%]+=[\w\-\.%!]+&?)+)?(#\w+\-\.%!)?/
1
Eru

これで試してください:

 var RegExp =/^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/i;
1
Amay Kulkarni

私のためにこれを試してみてください:

 /^(http[s]?:\/\/){0,1}(w{3,3}\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/;
1
kalpana

入力で_type="url"_を簡単に使用し、jsのcheckValidity()でチェックできます

例えば:

your.html

_<input id="foo" type="url">
_

your.js

_$("#foo").on("keyup", function() {
    if (this.checkValidity()) {
        // The url is valid
    } else {
        // The url is invalid
    }
});
_
0

長い調査の後、この正規表現を作成しました。他の人にも役立つことを願っています......

url = 'https://google.co.in';
var re = /[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/;
if (!re.test(url)) { 
 alert("url error");
return false;
}else{
alert('success')
}
0
Aamir