Search code examples
javascriptregexemail-validationstring

Regular expression which matches a pattern, or is an empty string


I have the following Regular Expression which matches an email address format:

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$

This is used for validation with a form using JavaScript. However, this is an optional field. Therefore how can I change this regex to match an email address format, or an empty string?

From my limited regex knowledge, I think \b matches an empty string, and | means "Or", so I tried to do the following, but it didn't work:

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b

Solution

  • To match pattern or an empty string, use

    ^$|pattern
    

    Explanation

    • ^ and $ are the beginning and end of the string anchors respectively.
    • | is used to denote alternates, e.g. this|that.

    References


    On \b

    \b in most flavor is a "word boundary" anchor. It is a zero-width match, i.e. an empty string, but it only matches those strings at very specific places, namely at the boundaries of a word.

    That is, \b is located:

    • Between consecutive \w and \W (either order):
      • i.e. between a word character and a non-word character
    • Between ^ and \w
      • i.e. at the beginning of the string if it starts with \w
    • Between \w and $
      • i.e. at the end of the string if it ends with \w

    References


    On using regex to match e-mail addresses

    This is not trivial depending on specification.

    Related questions