我想检查用户输入是否是JavaScript的电子邮件地址,然后将其发送到服务器或试图发送电子邮件,以防止最基本的误解。


当前回答

這些將與上使用的電子郵件(他們正確相匹配每個規則)。Gmail /^[a-z](?!\.\.)([a-z\.])){4,28}[a-z0-9]@gmail.com$/i Yahoo /^[a-z](?!\.\.)([w\.])){3,30}[w]@yahoo.com$/i Outlook/Hotmail /[a-z](?!\.\.)([w\.])){0,62}[w]@(outlook.com♰hotmail.com)$/i

其他回答

這些將與上使用的電子郵件(他們正確相匹配每個規則)。Gmail /^[a-z](?!\.\.)([a-z\.])){4,28}[a-z0-9]@gmail.com$/i Yahoo /^[a-z](?!\.\.)([w\.])){3,30}[w]@yahoo.com$/i Outlook/Hotmail /[a-z](?!\.\.)([w\.])){0,62}[w]@(outlook.com♰hotmail.com)$/i

在 nodeJS 中,您也可以使用验证器节点模块,并简单地使用此类

使用 npm 安装验证器安装图书馆

var validator = require('validator');

validator.isEmail('foo@bar.com'); //=> true 

下面是一个解决方案,它工作,并包括验证 / 通知的幻觉性,以以下形式:

您可以在此链接上运行

雅加达

(function() {
  'use strict';

  window.addEventListener('load', function() {
    var form = document.getElementById('needs-validation');
    form.addEventListener('submit', function(event) {
      if (form.checkValidity() === false) {
        event.preventDefault();
      }
      form.classList.add('was-validated');
      event.preventDefault();              
    }, false);
  }, false);
})();

HTML

<p class='title'>
    <b>Email validation</b>
  <hr size="30px;">
</p>
<br>

<form id="needs-validation" novalidate>
  <p class='form_text'>Try it out!</p>
  <div class="form-row">
    <div class="col-12">
      <input type="email" class="form-control" placeholder="Email Address" required>
        <div class="invalid-feedback">
          Please enter a valid email address.
        </div>
    </div>
  <div class="row">
    <div class="col-12">
      <button type="submit" 
          class="btn btn-default btn-block">Sign up now
      </button>
    </div>
   </div>
</form>

你不能预测信是正确的方式,用户打算它们是 - 这是最常见的错误......错过一个字母或输入错误的字母。

最终,无论你在JavaScript中做什么,你总是需要你的备份脚本来检查电子邮件是否也成功发送,并且它可能会有一个验证过程。

所以,如果你想确保它是某种类型的电子邮件地址,而不是他们的用户名,你只需要真正检查是否有 @ 符号在那里,至少 1 点,并留下所有剩余的备份代码。

var email = 'hello@example.com'
if(email.split('@').length == 2 && email.indexOf('.') > 0){
      // The split ensures there's only 1 @
      // The indexOf ensures there's at least 1 dot.
}

最好避免阻止用户输入有效的电子邮件,而不是实施如此多的限制,以至于它变得复杂。

这只是我的观点!

这是由数千个网站使用的官方Rails指南提出的验证的JavaScript翻译:

/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i

相对简单,但对大多数常见的错误进行测试。

测试了数千个电子邮件的数据集,并且有零的虚假负面 / 积极。

使用例子:

const emailRegex = /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i;

emailRegex.test('email@example.com');    // true

// Multi-word domains
emailRegex.test('email@example.co.uk');  // true
emailRegex.test('email@mail.gmail.com'); // true

// Valid special characters
emailRegex.test('unusual+but+valid+email1900=/!#$%&\'*+-/=?^_`.{|}~@example.com') // true

// Trailing dots
emailRegex.test('email@example.co.uk.'); // false

// No domain
emailRegex.test('email@example');        // false

// Leading space
emailRegex.test(' email@example.com');   // false

// Trailing space
emailRegex.test('email@example.com ');   // false

// Incorrect domains
emailRegex.test('email@example,com ');   // false

// Other invalid emails
emailRegex.test('invalid.email.com')        // false
emailRegex.test('invalid@email@domain.com') // false
emailRegex.test('email@example..com')       // false