web-dev-qa-db-fra.com

Expression régulière pour la validation d'URL (en JavaScript)

Quelqu'un a-t-il un regex pour valider les URL (PAS pour les trouver dans un passage de texte)? Un extrait JavaScript serait préférable.

22
Marek Stój

La syntaxe réelle de l'URL est assez compliquée et difficile à représenter dans l'expression régulière. La plupart des regex d'apparence simple donneront de nombreux faux négatifs ainsi que des faux positifs. Voir pour l'amusement ces efforts mais même le résultat final n'est pas bon.

De plus, de nos jours, vous voudriez généralement autoriser l'IRI ainsi que l'URI de la vieille école, afin que nous puissions établir un lien vers des adresses valides comme:

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

Je n'irais que pour des vérifications simples: cela commence-t-il par une bonne méthode connue: nom? Est-il exempt d'espaces et de guillemets doubles? Si c'est le cas, l'enfer, c'est probablement assez bon.

27
bobince

Dans le réponse acceptéebobince c'est vrai: valider uniquement le nom du schéma,: //, et les espaces et les guillemets suffisent généralement. Voici comment la validation peut être implémentée en JavaScript:

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

ou

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

ou

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

Références pour la syntaxe:

50
Akseli Palén

Essayez ce regex

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

Cela fonctionne mieux pour moi.

16
Musaddiq Khan

J'ai trouvé un certain succès avec ceci:

/^((ftp|http|https):\/\/)?www\.([A-z]+)\.([A-z]{2,})/
  • Il vérifie l'un ou aucun des éléments suivants: ftp: //, http: // ou https: //
  • Il nécessite www.
  • Il vérifie tout nombre de caractères valides.
  • Enfin, il vérifie qu'il a un domaine et que ce domaine est au moins 2 caractères.

Ce n'est évidemment pas parfait mais cela a plutôt bien géré mes affaires

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

Essayez ceci regex , cela fonctionne pour moi:

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

J'utilise l'expression régulière/^ [a-z] +: [^:] + $/i pour la validation d'URL. Voir un exemple de mon cross-browser InputKeyFilter code avec validation d'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>

Voir aussi ma page exemple du filtre de clé d'entrée .

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

essayez avec ceci:

 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

Essayez ça ça marche pour moi:

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

Vous pouvez simplement utiliser type="url" Dans votre entrée et le vérifier avec checkValidity() dans js

Par exemple:

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
Daniel Rodríguez

Après une longue recherche, je construis cette expression reg. J'espère que cela aidera les autres aussi .......

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