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


当前回答

     // Html form call function name at submit button

    <form name="form1" action="#"> 
    <input type='text' name='text1'/>
    <input type="submit" name="submit" value="Submit" 
    onclick="ValidateEmail(document.form1.text1)"/>
   </from>

    // Write the function name ValidateEmail below

    <script>
     function ValidateEmail(inputText)
    {
  var mailformat = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
    if(inputText.value.match(mailformat))
    {
    alert("Valid email address!");
    document.form1.text1.focus();
    return true;
    }
    else
   {
    alert("You have entered an invalid email address!");
    document.form1.text1.focus();
    return false;
    }
    }
   </script>

其他回答

如果你把你的常规表达式定义为一个字符串,那么所有的背影都必须逃脱,所以而不是“\w”你应该有“\w”。

否则,将其定义为常规表达式:

var pattern = /^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/; 

如何创建一个功能,将测试任何字符串对电子邮件的模式使用常规表达在JavaScript,因为我们知道电子邮件地址可以是相当不同的地区,如在英国和澳大利亚它通常以.co.uk 或.com.au 结束,所以我试图覆盖这些也,也检查字符串是否转移到功能,这样的东西:

var isEmail = function(str) {
  return typeof str==='string' && /^[\w+\d+._]+\@[\w+\d+_+]+\.[\w+\d+._]{2,8}$/.test(str);
}

然后检查它是否像下面的电子邮件:

isEmail('alex@example.com'); //true
isEmail('alireza@test.co.uk'); //true
isEmail('peter.example@yahoo.com.au'); //true
isEmail('alex@example.com'); //true
isEmail('peter_123@news.com'); //true
isEmail('hello7___@ca.com.pt'); //true
isEmail('example@example.co'); //true
isEmail('hallo@example.coassjj#sswzazaaaa'); //false
isEmail('hallo2ww22@example....caaaao'); //false

下面是MDN上推荐的Regex模式为HTML5:

支持电子邮件输入类型的浏览器自动提供验证,以确保仅符合互联网电子邮件地址标准格式的文本输入到输入框中。

/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}
[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/

https://developer.mozilla.org/en-US/docs/Web/HTML/元素/输入/电子邮件#验证

好吧,有很多答案包含一些不同的常规表达式,我尝试了很多,我得到了不同的结果和各种不同的问题。

对于 UI 验证,我对寻找 @ 标志的最基本检查很好,重要的是要注意的是,我总是用标准的“验证电子邮件”进行服务器侧验证,其中包含用户确认他们的电子邮件地址的独特链接。

if (email.indexOf('@') > 0)

我故意选择了0甚至以零为基础,因为它也确保在 @ 之前有一个单个字符。

在我的情况下,我想避免 ~ 和 # 这就是为什么我使用了另一个解决方案:

function validEmail(email){
  const regex = /^((?!\.)[\w\-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$/;
  return regex.test(email);
}