2010-11-25 10 views
11

Je cherche une expression régulière qui acceptent urls comme ceux-ci:Regex pour urls sans http, https, ftp

http://www.example.com 
www.example.com 

C'est ce que j'ai jusqu'à présent, mais il ne correspond pas à regex URL sans http:// ou https:// ou ftp://:

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

Comment puis-je faire le protocole facultatif?

+1

'example.pl': Un site en Pologne ou Perl scénario? – Boldewyn

+0

@Boldewyn, les deux! :) –

+0

Dans le cas de l'OP malheureusement pas. Il sera soit consommé par l'expression régulière ou non. [RFC 3986] (http://labs.apache.org/webarch/uri/rfc/rfc3986.html#regexp) (le lien mène à une expression rationnelle pour analyser les URL) a ses raisons d'appliquer soit un schéma, soit le \ \ 'partie. Bien que je comprenne la nécessité de trouver de telles choses (voir [l'addon de Linkification pour FF] ​​(http://yellow5.us/firefox/linkification/) – Boldewyn

Répondre

9

Faire la (ftp|http|https):\/\/ partie facultative:

((ftp|http|https):\/\/)? 
+0

Merci, mais maintenant je peux faire correspondre par exemple "example" ou "[email protected]". Et je ne le veux pas. Alors, comment puis-je résoudre ce problème? Regex: regexp =/((ftp | http | https): \/\ /)? (\ W +: {0,1} \ w * @)? (\ S +) (: [0-9] +)? (\/| \/([\ w #!:.? + = &% @! \ - \ /]))? /; Je ne veux pas faire correspondre "[email protected]" ou "exemple" – Guest

+0

'exemple @ exemple.com' est en fait une URL valide: Le premier' exemple' est un nom d'utilisateur, qui peut être soumis de cette façon. Essayez de charger cette même page avec un 'exemple @' ajouté entre 'http: //' et 'stackoverflow.com'. – Boldewyn

+0

OK. Je ne le savais pas. Merci de votre aide. – Guest

2

Essayez cette validera cette URL avec (http, ftp, https) ou sans (http, ftp, https) ..

/^(?:(ftp|http|https):\/\/)?(?:[\w-]+\.)+[a-z]{3,6}$/; 
+2

Cette regex n'accepte pas l'URL pour les domaines en provenance d'Allemagne. par exemple (www.germany.de). Vous devez changer la regex à '/<(?ftp|http|https):\/\/)?(?:[\w-]+\.)+[az]{2,6}$/ Le '2 est important. –

+0

Ce n'est pas un excellent moyen de le faire. Vraiment tout ce que vous pouvez faire est de vérifier un '.'. Il y a beaucoup de nouveaux TLD avec des noms de plus de 6 caractères ... – Askdesigners

0

Veuillez voir https://codegolf.stackexchange.com/a/480/6593

Je cite le lien ci-dessus:

value = 'www.google.com'; 
if(/(^|\s)((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)/gi.test(value)) { 
      return true; 
     } else { 
      return false; 
     } 
1

Essayez ceci cela validera URL avec ou sans (http, ftp, https) dans les cas supérieur et inférieur et vous permet de pour numerics

/^(?:(ftp|http|https)?:\/\/)?(?:[\w-]+\.)+([a-z]|[A-Z]|[0-9]){2,6}$/gi;