I want to limit number of subdomain in Regular Expression

Viewed 59

I want to limit levels of subdomain to 3 levels only. trying regex below fails

([\.]?[a-z]*){3}

My Target: abc.def.ghi

but

regex above accepts abc.def.ghi. (Notice the last .)

1 Answers

Use

^(?:[a-z]+(?:\.[a-z]+){0,2})?$

See proof.

Explanation

--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  (?:                      group, but do not capture (optional
                           (matching the most amount possible)):
--------------------------------------------------------------------------------
    [a-z]+                   any character of: 'a' to 'z' (1 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
    (?:                      group, but do not capture (between 0 and
                             2 times (matching the most amount
                             possible)):
--------------------------------------------------------------------------------
      \.                       '.'
--------------------------------------------------------------------------------
      [a-z]+                   any character of: 'a' to 'z' (1 or
                               more times (matching the most amount
                               possible))
--------------------------------------------------------------------------------
    ){0,2}                   end of grouping
--------------------------------------------------------------------------------
  )?                       end of grouping
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string
Related