Validate Emails using Regex in JavaScript

Oct 27, 2022

To validate emails using a regular expression, you can use the match function with one of the two following regular expressions. The match() function will return a truthy value if there is a valid email address in the given input string.

/[^\s@]+@[^\s@]+\.[^\s@]+/
/(?:[a-z0-9+!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/i

The first regular expression is much simpler and more concise. It ensures that you have a sequence of non-whitespace characters, followed by an @, followed by more non-whitespace characters, a dot, and more non-whitespace.

The second regular expression is more complete and is fully compliant with the RFC-2822 spec for email addresses.

Below is a live example that lets you test email addresses using the above regular expressions.

<div>
  <input id="example" type="email"/>
  <div>
    <button onclick="verifyEmail1()">Verify Email with Regex 1</button>
    <button onclick="verifyEmail2()">Verify Email with Regex 2</button>
  </div>
  <div>
    <p id="result"></p>
  </div>
</div>

<script>
function verifyEmail1() {
  const input = document.querySelector("#example");
  const display = document.querySelector("#result");
  if (input.value.match(/[^\s@]+@[^\s@]+\.[^\s@]+/gi)) {
    display.innerHTML = input.value + ' is valid';
  } else {
    display.innerHTML = input.value + ' is not a valid email';
  }
}
function verifyEmail2() {
  const input = document.querySelector("#example");
  const display = document.querySelector("#result");
  if (input.value.match(/(?:[a-z0-9+!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/gi)) {
    display.innerHTML = input.value + ' is valid';
  } else {
    display.innerHTML = input.value + ' is not a valid email';
  }
}
</script>


Did you find this tutorial useful? Say thanks by starring our repo on GitHub!

More Fundamentals Tutorials