简体   繁体   中英

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: az, AZ, 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?

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]

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.";
  }

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 )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM