NoviceCoding
NoviceCoding

Reputation: 6361

Regex help: subdomain check

Hey I have a form where the person enters the subdomain like value.google.com and the entry would be "valid"

I want to run a regex check (I am absolutely horrible at regex) that does the following:

First Character: Cannot be symbol Middle Characters: a-z, A-Z, and symbols - and . ONLY Last character: Cannot be a symbol

I want it to spit out false if it fails the test.

Can anyone help me out with this? Thanks!

Also any other limitations do you guys think should be in there?

Upvotes: 1

Views: 4662

Answers (3)

Taylor Hawkes
Taylor Hawkes

Reputation: 651

I think this is probably the most common situation.

$subdomain = "usersubdomain";

if(preg_match("/^[A-Z0-9]+$/i", $subdomain)) {
   echo "Valid sub domain";
  }else{
   echo "Not a valid sub domain.";
  }

Upvotes: 0

jensgram
jensgram

Reputation: 31508

If the TLD is always com you should be able to do with:

/^(.*)\.[^.]+\.com$/

This will match whatever's before the rightmost . character (excluding the .com).

However, you might want to do this with simple string operations instead (strrpos()). Or, you could split on .:

function extract_sub($domain) {
        $parts = explode('.', $domain);

        return implode('.', array_slice($parts, 0, -2));
}

(Demo)

Upvotes: 0

Tedd Hansen
Tedd Hansen

Reputation: 12362

What you need is a character class. :)

  • [a-zA-Z\-\.] would match characters of type "a-zA-Z-.".
  • [a-zA-Z] would match characters of type "a-zA-Z".
  • ^ means beginning of line
  • $ means end of line
  • + means "one or more times"

So what you are looking for is: ^[a-zA-Z][a-zA-Z\-\.]+[a-zA-Z]$

And since you in PHP can set i-flag it becomes case insensitive and this code should work:


  if (preg_match("/^[a-z][a-z\-\.]+[a-z]$/i", "valid.google.com")) {
   echo "A match was found.";
  } else {
   echo "A match was not found.";
  }

Tip: Should you not also include numbers? [a-z0-9]

Upvotes: 1

Related Questions