使用 JavaScript 验证电子邮件地址文本框

IT技术 javascript
2021-03-15 20:08:16

我需要验证用户从文本框出来时输入的电子邮件地址。
我用谷歌搜索过这个,但我得到了表单验证 JScript;我不想要表单验证。我想要文本框验证。
我已经写在 JScript 下,但“如果电子邮件无效,则不会返回相同的页面”。

 function validate(email) {

            var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
            //var address = document.getElementById[email].value;
            if (reg.test(email) == false) 
            {
                alert('Invalid Email Address');
                return (false);
            }
 }
6个回答

假设您的正则表达式是正确的:

在您的脚本标签内

function validateEmail(emailField){
        var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;

        if (reg.test(emailField.value) == false) 
        {
            alert('Invalid Email Address');
            return false;
        }

        return true;

}

在您的文本字段中:

<input type="text" onblur="validateEmail(this);" />
您的回答不符合 RFC 6532。在电子邮件的左侧和右侧部分允许使用口音。如果你有一个法国用户(像我一样),并且它的电子邮件包含像 Testé@exemple.com 这样的口音,它不会工作。regex101.com/r/oN1qD0/1 也w,他们的新域扩展包含超过 4 个字符,如 .quebec ...
2021-04-29 20:08:16
您是否输入了有效的电子邮件地址?我没有测试您的正则表达式,我建议使用以下建议之一。
2021-05-06 20:08:16
啊 - 当它弹出时应该点击刷新doodah......这几乎涵盖了它并在我之前发布;) 不过我仍然会使用 Hexillion RegExp。
2021-05-10 20:08:16
{2,4} 应替换为 {2,},因为有更长的 TLD,例如博物馆。
2021-05-11 20:08:16
谢谢 Ben。但总是显示无效的 emailid。为什么?我不明白这个问题。
2021-05-14 20:08:16

这是一个很老的问题,所以我更新了这个答案以考虑 HTML 5 电子邮件类型。

对于 HTML 5,您实际上根本不需要 JavaScript;只需使用电子邮件输入类型:

<input type="email" />
  • 如果您想使其成为强制性的,您可以添加所需的参数。

  • 如果您想添加额外的 RegEx 验证(例如限制为@foo.com电子邮件地址),您可以使用模式参数,例如:

    <input type="email" pattern=".+@foo.com" />
    

MozDev上有更多可用信息


原答案如下


首先 - 我会推荐 Hexillion 的电子邮件验证器 RegEx:http ://hexillion.com/samples/

它非常全面 - :

^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[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]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$

我认为您需要在 JavaScript 中使用一个函数,例如:

function validateEmail(sEmail) {
  var reEmail = /^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[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]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/;

  if(!sEmail.match(reEmail)) {
    alert("Invalid email address");
    return false;
  }

  return true;

}

在 HTML 输入中,您需要使用 onblur 触发事件 - 执行此操作的简单方法是简单地添加如下内容:

<input type="text" name="email" onblur="validateEmail(this.value);" />

当然,这缺少一些健全性检查并且不会进行域验证(必须在服务器端完成)-但它应该为您提供一个非常可靠的 JS 电子邮件格式验证器。

注意:我倾向于使用match()string 方法而不是test()RegExp 方法,但这应该没有任何区别。

域名验证?还是完整的 URI 验证?我目前正在使用看起来像这样的东西来进行完整的 URI 验证(注意:尚未经过销毁测试,我将范围限制为 http、https 和 ftp 协议)/^(?:(?:(http|https|ftp|[a-z]+)\:\/\/))?((?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?)\.?)+)\.([a-zA-Z]{2,6})(\/[a-zA-Z0-9\-\=\:\;\@\&\+\%\,\.\!\~\'\(\)\/]+)*\/?(?:\?([^#]+))?(?:\#(.+))?$/但如果它只是域验证,那么您再次需要hexillion.com/samples上的不错
2021-04-22 20:08:16
嗨 CD001,网站验证的最佳 RegEx 是什么?
2021-05-08 20:08:16

结果isEmailValid可用于测试电子邮件的语法是否有效。

var validEmailRegEx = /^[A-Z0-9_'%=+!`#~$*?^{}&|-]+([\.][A-Z0-9_'%=+!`#~$*?^{}&|-]+)*@[A-Z0-9-]+(\.[A-Z0-9-]+)+$/i
var isEmailValid = validEmailRegEx.test("Email To Test");
function validateEmail(email) { 
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(email);
} 

在上面的代码中使用 javascript 验证电子邮件 ID 有效。

验证电子邮件是验证 HTML 表单时非常重要的一点。在本页中,我们讨论了如何使用 JavaScript 验证电子邮件:

电子邮件是由@ 符号分隔成两部分的字符串(ASCII 字符的子集)。一个“personal_info”和一个域,即personal_info@domain。Personal_info 部分的长度最长可达 64 个字符,域名最长可达 253 个字符。Personal_info 部分包含以下 ASCII 字符。

  1. 大写 (AZ) 和小写 (az) 英文字母。
  2. 数字 (0-9)。
  3. 人物 !# $ % & ' * + - / = ? ^ _ ` { | }~
  4. 特点 。(句点、点或句号),前提是它不是第一个或最后一个字符,并且不会一个接一个。

域名 [例如 com、org、net、in、us、info] 部分包含字母、数字、连字符和点。

有效电子邮件 ID 示例

mysite@ourearth.com

my.ownsite@ourearth.org

mysite@you.me.net

无效的电子邮件 ID 示例

mysite.ourearth.com [@ 不存在]

mysite@.com.my [ tld(顶级域)不能以点“.”开头。]

@you.me.net [@ 前没有字符]

mysite123@gmail.b [ ".b" 不是有效的 tld ]

mysite@.org.org [ tld 不能以点“.”开头。]

.mysite@mysite.org [ 电子邮件不应以“.”开头。]

mysite()*@gmail.com [这里的正则表达式只允许字符、数字、下划线和破折号]

mysite..1234@yahoo.com [不允许使用双点]

用于验证电子邮件 ID 的 JavaScript 代码

function ValidateEmail(mail) {
        if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w {2, 3})+$/.test(myForm.emailAddr.value)) {
            return (true)
        }
        alert("You have entered an invalid email address!")
        return (false)
    }