Il me semble que vous feriez mieux de diviser la chaîne en morceaux avec une expression régulière comme \s*,\s*
d'abord, puis valider chaque domaine séparément. Essayer de tout pousser dans une seule regex vous rendra la vie dure si vous essayez de changer la logique plus tard.
Le domaine de validation regex que vous avez devrait fonctionner. Je ne sais pas si vous interdisez intentionnellement certains domaines valides. Un plus générique regex correspondant de domaine serait:
^[\w-]+(\.[\w-]+)+$
Mais celui-ci ne permettant pas localhost
, qui peut ou ne peut pas être autorisé dans votre cas. Il est trop lâche pour les spécifications à d'autres égards. En option, remplacez chaque [\w-]+
par [a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]?
pour plus de rigueur et plus d'obfuscation - bien que n'invalide pas les enregistrements uniquement numériques, qui ne sont pas valides selon la spécification. À quel point avez-vous besoin d'être?
Abstraction faite de l'étoffe sur le partage de la première chaîne, basée sur mon exemple regex ci-dessus, vous pouvez utiliser le monstre suivant pour correspondre à une liste des domaines:
^\s*([\w-]+(\.[\w-]+)+\s*,\s*)*[\w-]+(\.[\w-]+)+\s*$