Regexp pour le sous-domaine
Personne ne sait comment écrire une expression régulière qui ne permet a-zA-Z0-9.- (des lettres, des chiffres, des points, et le tableau de bord) MAIS qui ne commence ou se termine par un point ou un tiret ?
J'ai essayé celui-ci :
/^[^.-][a-zA-Z0-9.-]+[^.-]$/
... mais si j'écris quelque chose comme "john@", il fonctionne, et je ne veux pas parce que @ n'est pas autorisé.
- Ce regex saveur? (perl,egrep,awk,vim,javascript...)
Vous devez vous connecter pour publier un commentaire.
Sous-domaine
Selon la pertinente internet recommandations (RFC3986 la section 2.2, qui à son tour se réfère à: RFC1034 la section 3.5 et RFC1123 la section 2.1), un sous-domaine (qui est une partie d'un domaine DNS nom de l'hôte), doit répondre à plusieurs exigences:
[A-Za-z]
ou chiffres[0-9]
).Ici est une expression fragment pour un sous-domaine de la partie qui répond à ces exigences:
[A-Za-z0-9](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?
Remarque que cette expression fragment ne doit pas être utilisé seul - il nécessite l'incorporation des conditions aux limites dans un contexte plus large, comme en témoigne l'expression suivante pour un nom d'hôte DNS...
Nom d'hôte DNS
Un nom d'hôte, (pas une adresse IP), doivent satisfaire à des exigences supplémentaires:
Avec cela à l'esprit, voici l'commenté regex (syntaxe PHP), qui permettra de pseudo-valider un nom d'hôte DNS: (à Noter que ce qui intègre une version modifiée de l'expression ci-dessus pour un sous-domaine et ajoute des commentaires à ce aussi bien).
Mise à jour 2016-08-20: Depuis cette réponse a été posté en 2011, le nombre de domaines de premier niveau a explosé. En août 2016 il y a maintenant plus de 1400. L'original de la regex pour cette réponse intégré toutes ces mais ce n'est pas de loger pratique. La nouvelle expression régulière ci-dessous intègre une expression différente pour le domaine de premier niveau. L'algorithme provient de: Nom de Domaine Spécification de projet-liman-tld-noms-06.
Remarque que cette expression n'est pas parfait. Elle exige un ou plusieurs sous-domaines, mais techniquement, un hôte peut consister en un TLD ayant pas de sous-domaine (mais c'est rare).
Mise à jour 2014-08-12: Ajouté l'expression simplifiée pour un sous-domaine qui ne nécessite pas d'alternance.
Mise à jour 2016-08-20: Modifié nom d'hôte DNS regex (plus généralement) de correspondre à la nouvelle grande nombre de domaines de premier niveau. Aussi, parés hors matériel inutile de répondre.
^\w(?:[\w-]{0,61}\w)?$
pour le sous-domaine des pièces fonctionne très bien, en fait, enregistrements srv exigent pour éviter les collisions avec la normale de 2 sous-domaines. pour info doubles tirets sont requis pour punycode au travail. Bien sûr, vous pouvez limiter ces validations à certains types d'enregistrement, mais vous aurez à écrire un analyseur syntaxique pour que ou quelque chose, qui vous permettent également de vérifier à contre courant tld liste 🙂Vous souhaitez le premier et le dernier caractère limité alphanumérique. Ce que vous avez maintenant permet le premier et le dernier caractère à être autre chose qu'un point et tiret. Cela correspond à la description:
/^\w[\w.-]+\w$/i
Dans notre projet, nous avons correspondent à des sous-domaines comme ce
Client JS
Serveur Ruby
Essayez celui-ci:
MAIS la chaîne de caractères doit être d'au moins 2 caractères de match: un a-zA-Z0-9 et a-zA-Z0-9. Pour éviter cela, vous pouvez utiliser cette regex:
Mais vous devez faire une vérification supplémentaire pour s'assurer que la fin de la chaîne est ni un point ni tiret.
Ici est DOMAINE et sous-domaine solution qui peut aider à quelqu'un d'autre:
qui passe à la suite chai tests:
Plus de tests sont les bienvenus !
Essayer ce reg-exp
/^[a-zA-Z0-9][a-zA-Z0-9.-]*[a-zA-Z0-9]$/
Le problème avec votre code a été
[^.-]
à le début et la fin des matches de quelque nature que ce soit excepeté '.' ou '-' qui correspond à tous les caractères et pas nécessairement[a-zA-Z0-9]
Essayer cette
regex
:Ici est regexp pour le sous-domaine qui
Permettre alphanumérique dans la chaîne de
^[a-zA-Z0-9]+[a-zA-Z0-9-._]*[a-zA-Z0-9]+$
Exemple Correcte
Exemple Incorrect
https://abcxyz.com