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