I use this, but it's a preg rather than ereg pattern:

 '/([a-z0-9]+[a-z0-9\-]*\.)+[a-z0-9]+[a-z0-9\-]*[a-z0-9]+$/i'

Two problems (which in practice are so slight that I've foregone my usual 
standards-analness to ignore them) 

  1) It will allow a domain name component (except the final one) to end 
     with a dash (e.g., "test-.example.com").

  2) It will not allow a one-character final component.

miguel

On Sun, 26 May 2002, Jeff Field wrote:
> This is not really specific to PHP (although the information might be useful
> for all that form validation we all do), and for that I apologize in advance
> (does anyone know of a regex mailing list?), but maybe someone here can help
> with the following:
> 
> I find no good regex for checking valid domain names.  None that I have seen
> take into account the fact that, although dashes ("-") and dots (".") are
> allowed in a domain name, the domain name can neither begin with nor end
> with a dash or dot, and additionally, two dashes or two dots in a row are
> not allowed and a dash followed by a dot or a dot followed by a dash are not
> allowed.
> 
> So, I've come up with two regex's for checking domain names. The first one
> checks that the name contains alphanumerics, the dash and the dot, and
> neither begins with or ends with a dash or dot:
> 
>    ^[a-z0-9]$|^[a-z0-9]+[a-z0-9.-]*[a-z0-9]+$
> 
> The second one checks that two dashes and two dots are not together and that
> a dash followed by a dot or a dot followed by a dash are not together:
> 
>    --|\.\.|-\.|\.-
> 
> Putting it all together, the way I check for a valid domain name is with the
> following:
> 
>    if (eregi("^[a-z0-9]$|^[a-z0-9]+[a-z0-9.-]*[a-z0-9]+$", $domain_name) !=
> true
>       OR eregi("--|\.\.|-\.|\.-", $domain_name) == true
>    {
>       error;
>    }
> 
> So, my question (finally!) is this:
> 
> Is there any way to combine both expressions (basically, one part that
> checks for false and one part that checks for true) into one regex that just
> returns true or false?  I haven't been able to find any documentation that
> shows me how to do that, basically a "like this but not like this" syntax.
> 
> BTW, anticipating someone mentioning the fact that the above regex's don't
> check for a domain name ending with a dot followed by three characters max
> (as in .com, .net, etc.), it's because that long-held truth is no longer
> true.  We now have .info and .museum, and who know what the future will
> bring.
> 
> About the only truth left is that domain names end in a dot followed by two
> characters minimum (there are the country code domains like .us, .de. etc.
> but there are no one character TLD's at present and I would expect perhaps
> not for a long long time, but you never know).  Perhaps someone would expand
> on the regex above to include checking for a name ending with a dot followed
> by two characters minimum, I just haven't been into regex's long enough to
> know how).
> 
> Of course, you could get really anal about all this and check for domain
> names that only end in the current ICANN root server TLD's (about 260 or so,
> I believe), but that wouldn't account for TLD's that operate within other
> root servers (there's always sumthin').  Anyways,
> 
> Any help with the above is certainly appreciated!
> 
> Jeff
> 
> 
> 


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to