regular expression for validating url with sub-dom

2019-09-05 14:14发布

问题:

preg_match('/^(http:\\/\/)?(.+)\.MYDOMAIN\.com(.*)/', $url, $match)

This is my regex to validate a URL that must have a sub-domain, but if someone uses www instead of sub-domain it also gets validated. For example:

  • http://shoes.en.MYDOMAIN.com/ This must pass

  • http://www.MYDOMAIN.com/ This must fail

How can I edit my regex to fail if the sub-domain is www?

回答1:

I think you can do it with a negative lookahead assertion: (?!www\.) which being placed after the protocol check, checks if there is not a www. following the start or protocol.

/^(http:\\\/\/)?(?!www\.)(.+)\.MYDOMAIN\.com(.*)/.test("www.MYDOMAIN.com")


回答2:

try this one: tested a litle, seems to be working

preg_match('/^(http:\\/\/)?([^(www)]+)\.MYDOMAIN\.com(.*)/', $url, $match);


回答3:

How about first validate the domain using your current solution then check for www using a second expression:

(\.www\.|http:\/\/www\.|^www\.)