2009-11-09 4 views

Répondre

42

Essayez this-

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

+0

Salut @MarkRedman, la ressource sur snippets.dzone que vous avez lié à semble avoir été déplacé (je reçois un message d'erreur 410 est révolu). Y a-t-il une version mise à jour? Merci! –

8

essayer quelque chose comme ceci:

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

La fonction isUrl() ne fonctionne pas pour "http: // localhost/myprojects", "http://127.0.0.1/myprojects" – Code

+1

Cela ne fonctionne même pas sur "http://google.com". .. – christianbundy

+0

Ne fonctionne pas pour "http: //localhost/jquery.colorhelpers.js" –

8
function IsURL(url) { 

    var strRegex = "^((https|http|ftp|rtsp|mms)?://)" 
     + "?(([0-9a-z_!~*'().&=+$%-]+:)?[0-9a-z_!~*'().&=+$%-][email protected])?" //ftp的[email protected] 
     + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184 
     + "|" // 允许IP和DOMAIN(域名) 
     + "([0-9a-z_!~*'()-]+\.)*" // 域名- www. 
     + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名 
     + "[a-z]{2,6})" // first level domain- .com or .museum 
     + "(:[0-9]{1,4})?" // 端口- :80 
     + "((/?)|" // a slash isn't required if there is no file name 
     + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"; 
    var re=new RegExp(strRegex); 
    return re.test(url); 
} 

Regular expression visualization

Debuggex Demo (Improved version which matches also 'localhost')

+0

Ce fut le meilleur que j'ai trouvé jusqu'à présent. La seule chose, il renvoie vrai à isURL ("http"). – Anoyz

+2

très agréable. 'https | http | ftp ...' peut être écrit plus court => 'https? | ftp ...' – algorhythm

+0

Version améliorée pour correspondre même à 'localhost': ajouter '| localhost' après '+" [az] {2,6 }) "// premier niveau domain- .com ou .museum" dans la parenthèse => '+" [az] {2,6} | localhost) "// premier niveau domain- .com ou .museum' – algorhythm

0

Un pour l'avenir en utilisant la URL constructor et une instruction catch try de base, il est pris en charge dans la plupart des navigateurs modernes. Évidemment, aucun support IE ...

const isUrl = (str) => { 
    try { 
    new URL(str); 
    return true; 
    } catch() { 
    return false; 
    } 
} 

Si l'URL est valide, elle sera analysée par le constructeur et retournera vrai.

Si la chaîne n'est pas une URL valide, le constructeur écrase une erreur de syntaxe qui sera interceptée et retournera faux.

+0

Notez que cela sera techniquement valide avec le constructeur d'URL: 'http: // www.' – Prefix

2

Essayez ce code. Cette expression est plus complète et prend en compte l'adresse IP:

function checkUrl(s) { 
    var regexp = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/ 
    return regexp.test(s); } 
Questions connexes