Puis-je améliorer cette regex pour vérifier la validité des noms de domaine?
Donc, j'ai travaillé sur ce nom de domaine d'expression régulière. Jusqu'à présent, il semble pour ramasser les noms de domaine avec des Sld et Tld (avec l'option de ccTLD), mais il y a dédoublement de la TLD inscription. Cela peut-il être refait davantage?
params[:domain_name].downcase.strip.match(/^[a-z0-9\-]{2,63}
\.((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|
(c[acdfghiklmnorsuvxyz]|cat|com|coop)|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]|
(g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)|
(j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]|
(m[acdghklmnopqrstuvwxyz]|me|mil|mobi|museum)|(n[acefgilopruz]|name|net)|(om|org)|
(p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]|
(t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw])
(\.((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|
(c[acdfghiklmnorsuvxyz]|cat|com|coop)|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]|
(g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)|
(j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]|
m[acdghklmnopqrstuvwxyz]|mil|mobi|museum)|
(n[acefgilopruz]|name|net)|(om|org)|
(p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]|
(t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw]))?$/)
- Quelle est votre cas d'utilisation pour une regex qui doit être maintenue lors de la création de nouveaux domaines?
- Depuis toutes les réponses semblent donner d'autres moyens de recherche Tld, je propose de renommer cette question afin d'éviter la duplication dans le futur (à moins que les gens réellement commencer à répondre à la refactorisation question)
- bonne idée - c'est vraiment pas une regexp problème.
- Horriblement mauvaise idée, spécialement le fil de la liste des TLD.
Vous devez vous connecter pour publier un commentaire.
S'il vous plaît, s'il vous plaît, veuillez ne pas fixe et horriblement compliqué regex comme ce match pour les noms de domaine.
La liste des Tld est pas statique, en particulier avec l'ICANN à la recherche à un processus simplifié pour les nouveaux gtld. Même la liste des cctld changements parfois!
Avoir un regard sur la liste disponible à partir de http://publicsuffix.org/ et écrire du code qui est capable de télécharger et d'analyser cette liste à la place.
Télécharger ce: http://data.iana.org/TLD/tlds-alpha-by-domain.txt
Exemple d'utilisation (en Python):
Vous pouvez le facteur de domaine-création de liste de la validation de la fonction pour aider à la performance.
*
dans l'entrée de*.uk
signifie que tous les sous-domaine de.uk
est public à l'exception de ceux expressément énumérés.Je ne sais pas assez sur les noms de domaine sans doute. Mais pourquoi est-domaines comme l' "foo.info.com" apparié? Il semble que le nom de domaine est "info.com" dans ce cas particulier.
Et vous pouvez assurez-vous que le nom commence par [a-z\d]. Je ne pense pas que vous pouvez enregistrer un nom de domaine qui commence par un tiret?
Bien, comme vous l'avez écrit, le TLD partie est équivalent, mais plus long que
(\.<tldpart>){1,2}
mais je suis sûr que ça pourrait être fixé pour la duplication...edit: yech, non, ce serait possible, mais essentiellement un processus très lent de la force brute de la liste pour gérer les doublons, je pense. Plus simple et plus rapide à mettre la possible TLD et SLD+paires de pays dans une grande table de hachage et de vérification de la chaîne de contre ce.
Je vous recommande de commencer avec les règles énoncées dans RFC 1035, et ensuite travailler vers l'arrière, mais seulement si vous avez vraiment vraiment vraiment besoin de le faire à partir de zéro. Un domaine regex modèle a obtenu d'être (défendable en second lieu seulement à l'adresse de messagerie de modèles regex) la plus commune de la chose. Je voudrais vérifier le site regexlib.com et de parcourir par le biais de ce que les autres gens ont fait.
Vous pouvez construire la regex comme une chaîne, puis faire Regexp.nouveau(chaîne de caractères).