Comment valider un nom de domaine en utilisant les Regex & Php?
Je veux une solution pour valider les noms de domaine pas une url complète, L'exemple suivant est ce que je suis à la recherche de:
domain.com -> true
domain.net -> true
domain.org -> true
domain.biz -> true
domain.co.uk -> true
sub.domain.com -> true
domain.com/folder -> false
domµ*$ain.com -> false
Merci
- stackoverflow.com/questions/399932/... a beaucoup plus d'informations sur l'utilisation des expressions régulières pour faire correspondre les noms de domaine.
Vous devez vous connecter pour publier un commentaire.
Comment sur:
.museum
et.travel
./^(?:[-A-Za-z0-9]+\.)+[A-Za-z]{2,6}$/
. Il fonctionne avecpreg_match
fonction, par exemple, pas autrement.La réponse sélectionnée est incomplet ou erroné.
L'expression régulière pattern;
ne devrait PAS valider des domaines tels que:
-domain.com
,domain--.com
,-domain-.-.com
,domain.000
, etc...devrait valider des domaines tels que:
schools.k12
,newTLD.clothing
,good.photography
, etc...Après quelques autres recherches; ci-dessous est la plus correcte, la croix-langue et compact motif que je pouvais venir:
Ce modèle est conforme à la plupart* des règles définies dans les spécifications:
Note 1: La pleine longueur de domaine n'est pas inclus dans la regex. Il devrait simplement être vérifiée par des méthodes indigènes par exemple
strlen(domain) <= 253
.Note 2: Ce modèle fonctionne avec la plupart des langages dont PHP, Javascript, Python, etc...
Voir DÉMO ici (pour JS, PHP, Python)
Plus D'Infos:
L'expression régulière ci-dessus ne prend pas en charge IDNs.
Il n'y a pas de spec qui dit que l'extension (TLD) doit être comprise entre 2 et 6 caractères. Il prend en charge 63 caractères. Voir la TLD liste ici. Aussi, certains réseaux ne utiliser à l'interne personnalisé/pseudo Tld.
Autorités chargées de l'enregistrement pourrait imposer un peu plus, des règles spécifiques qui ne sont pas explicitement pris en charge dans cette expression. Par exemple,
.CO.UK
et.ORG.UK
doit avoir au moins 3 caractères, mais de moins de 23, sans l'extension. Ces types de règles sont non-standard et sujettes à changement. Ne pas les mettre en œuvre si vous ne pouvez pas maintenir.Les Expressions régulières sont grands, mais pas le meilleur, efficace, performant solution à chaque problème. Ainsi, un natif de l'URL de l'analyseur doit être utilisé au lieu de cela, chaque fois que possible. par exemple, Python
urlparse()
méthode ou PHPparse_url()
méthode...Après tout, c'est juste un format de validation. Une regex test ne permet pas de confirmer qu'un nom de domaine est configuré/existe! Vous devez tester l'existence d'une demande.
Specs & Références:
S'il vous plaît essayer cette expression:
Ce qu'il fait réellement
Exemples De Validation
Dans mon cas, le nom de domaine est considéré comme valable si le format est stackoverflow.com ou xxx.stackoverflow.com
Donc, en plus d'autres pile réponses, j'ai ajouté la vérification de pour www. aussi.
vous pouvez tester la fonction avec ce code
Rappelez-vous, regexes ne peut vérifier pour voir si quelque chose est bien formé. "www.idonotexistbecauseiammadeuponthespot.com" est bien formé, mais n'existe pas réellement... au moment de la rédaction. 😉 De plus, certains gratuits de fournisseurs d'hébergement web (comme Trépied) permettent souligne dans les sous-domaines. C'est clairement une violation de la Rfc, mais cela fonctionne parfois.
Voulez-vous vérifier si le domaine existe? Essayez dns_get_record au lieu de (seulement) une regex.
J'ai fait une fonction pour valider le nom de domaine sans regex.
Ce code affiche:
J'espère avoir tout couvert si j'ai oublié quelque chose dites-le moi et je peux améliorer cette fonction. 🙂