web-dev-qa-db-fra.com

Regex pour la validation de site Web ou d'URL

Je sais que c'est une question tellement courante et il y a tellement de réponses à cela, mais mon problème est différent, je veux accepter l'URL avec tous les formats ci-dessous:

http://www.sample.com
https://www.sample.com
http://www.sample.com/xyz
www.sample.com
www.sample.com/xyz/#/xyz
sample.com

// & much more ...

Donc, voici l'idée, j'autorise l'utilisateur à entrer sur son site Web et un autre utilisateur peut simplement cliquer sur le site Web enregistré et accéder au site Web des utilisateurs. Donc, ici, ce n'est pas une bonne idée de restreindre l'utilisateur à saisir l'URL appropriée, il peut entrer n'importe lequel des formats ci-dessus. Voici l'expression régulière que j'utilise actuellement, mais qui vérifie uniquement si l'URL commence à partir du protocole approprié:

^(ftp|http|https):\/\/[^ "]+$
10
Dheeraj Agrawal

Utilisez l'expression régulière ^((https?|ftp|smtp):\/\/)?(www.)?[a-z0-9]+\.[a-z]+(\/[a-zA-Z0-9#]+\/?)*$

Ceci est un élément de base que je construis tout à l'heure. Une recherche Google peut vous en donner plus.

Ici

  • ^ Devrait commencer par
  • ((https? | ftp | smtp): //)? peut ou peut ne contenir aucun de ces protocoles
  • (www.)? peut ou peut ne pas avoir www.
  • [a-z0-9] + (. [a-z] +) URL et domaine et également sous-domaine le cas échéant jusqu'à 2 niveaux
  • (/ [a-zA-Z0-9 #] + /?) * /? peut contenir le chemin d'accès aux fichiers mais pas nécessaire. le dernier peut contenir un /
  • $ devrait s'arrêter là
var a=["http://www.sample.com","https://www.sample.com/","https://www.sample.com#","http://www.sample.com/xyz","http://www.sample.com/#xyz","www.sample.com","www.sample.com/xyz/#/xyz","sample.com","sample.com?name=foo","http://www.sample.com#xyz","http://www.sample.c"];
var re=/^((https?|ftp|smtp):\/\/)?(www.)?[a-z0-9]+(\.[a-z]{2,}){1,3}(#?\/?[a-zA-Z0-9#]+)*\/?(\?[a-zA-Z0-9-_]+=[a-zA-Z0-9-%]+&?)?$/;
a.map(x=>console.log(x+" => "+re.test(x)));
24
Sagar V

Vous pouvez essayer ceci:

^((ftp|http|https):\/\/)?(www.)?(?!.*(ftp|http|https|www.))[a-zA-Z0-9_-]+(\.[a-zA-Z]+)+((\/)[\w#]+)*(\/\w+\?[a-zA-Z0-9_]+=\w+(&[a-zA-Z0-9_]+=\w+)*)?$

Démo mise à jour

const regex = /^((ftp|http|https):\/\/)?(www.)?(?!.*(ftp|http|https|www.))[a-zA-Z0-9_-]+(\.[a-zA-Z]+)+((\/)[\w#]+)*(\/\w+\?[a-zA-Z0-9_]+=\w+(&[a-zA-Z0-9_]+=\w+)*)?$/gm;
const str = `http://www.sample.com
https://www.sample.com
http://www.sample.com/xyz
www.sample.com
www.sample.com/xyz/#/xyz
sample.com
www.sample.com
mofiz.com
kolim.com
www.murikhao.www.sample.com
http://murihao.www.sample.com
http://www.sample.com/xyz?abc=dkd&p=q&c=2
www.sample.gov.bd
www.sample.com.en
www.sample.vu


`;
let m;

while ((m = regex.exec(str)) !== null) {

    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    console.log("matched :"+m[0]);
}
5
Rizwan M.Tuman