Regular expression which matches a pattern, or is an empty string
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
- i.e. at the beginning of the string if it starts with
- Between
\w
and$
- i.e. at the end of the string if it ends with
\w
- i.e. at the end of the string if it ends with
References
On using regex to match e-mail addresses
This is not trivial depending on specification.
Related questions
An alternative would be to place your regexp in non-capturing parentheses. Then make that expression optional using the ?
qualifier, which will look for 0 (i.e. empty string) or 1 instances of the non-captured group.
For example:
/(?: some regexp )?/
In your case the regular expression would look something like this:
/^(?:[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+)?$/
No |
"or" operator necessary!
Here is the Mozilla documentation for JavaScript Regular Expression syntax.
I'm not sure why you'd want to validate an optional email address, but I'd suggest you use
^$|^[^@\s]+@[^@\s]+$
meaning
^$ empty string| or^ beginning of string[^@\s]+ any character but @ or whitespace@ [^@\s]+$ end of string
You won't stop fake emails anyway, and this way you won't stop valid addresses.