开发者

Basic web-address validation regex?

I am looking for a regex that validates simple website addresses, i.e.

  • http://www.stackoverflow.com
  • www.stackoverflow.com
  • stackoverflow.com
  • stack-overflow.co.it

I need it for contact details, 'Website' field, then when user click it opens IE, it does开发者_JAVA技巧n't have to be strict, I just don't want the user to enter 'I love milk' or 'google' etc.

I thought instead shrinking my mind writing my own struggling to find exception, why won't I learn from the community experience, anyone who has a good regex or a link please post.

Thanks a lot.


From RFC 3986, Uniform Resource Identifiers (URI): Generic Syntax, appendix B (p. 50):

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?

If the URI matches this regular expression, it's well formed. The match groups give you the various pieces, which are:

scheme    = $2
authority = $4
path      = $5
query     = $7
fragment  = $9


https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?

excerpt from http://snipplr.com/view/2371/regex-regular-expression-to-match-a-url/


 (https?://)?([-\w\.]+)+(:\d+)?

revise per suggestion, but i think people should better follow the clue and figure out the answer themselves. anyway, even copy/paste, people should know what they are doing.


I also mentioned the RFC 3986, but it is a bit too generic, as it is made to match relative URLs as well. Obviously, in the OP case, we want absolute public URLs.

Something like ^(https?://)?(?:[\w.]+)\.(?:[\w:.]+) seems more realistic. I deliberately exclude sites needing username/password pair, but accept port number.
This kind of expression will break when Unicode URLs will be commonplace...

[EDIT] I accepted any scheme, I should restrict more, I suppose, no need to accept ftp addresses or bzr+ssl:// ones for the exposed case...


One option without using regex, but address must start with a protocol like http://:

static bool validateAddress(string address)
{
    Uri valid = null;
    return 
        address.StartsWith("http") &&
        Uri.TryCreate(address, UriKind.Absolute, out valid);
}


Validating or detecting URLs is not as straightforward as it looks. This is a blog post which digs a little deeper into this topic:

http://www.blog.activa.be/2008/10/30/ExtractingURLsNotPerfectButQuotgoodEnoughquot.aspx

and also:

https://blog.codinghorror.com/the-problem-with-urls/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜