关于javascript:RegEx无法识别无效的电子邮件

RegEx Not Recognizing Invalid Email

我正在尝试验证表单元素的电子邮件地址。我熟悉正则表达式,因此我相信该部分是正确的,但我希望它在输入的电子邮件无效时显示警告。我的问题是,即使我输入了无效的电子邮件地址而不是弹出警报窗口,表单也会提交。

javascript中的regex函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function validateEmail()
            {
                var myEmailRegEx = /\w+@\w+\.[a-z]|[A-Z]|\d|\.|-{2,}/

                if(myEmailRegEx.test(document.getElementById("EmailAddress")))
                {
                    return true;
                }
                else
                {
                    alert("That is not a valid email address");
                    return false;
                }
            }

表单HTML:

1
2
3
<input type="text" name="Email" id="EmailAddress" size="50" />
        <br />
        <input type="submit" value="Submit Email" onClick="validateEmail();" />


可以这样做:

1
<input type="email" />

完成它。


为了清晰起见,您所做的事情的问题在于,您将一个对象交给regex进行测试,它总是返回true(尽管很奇怪)。使用.value,我们得到字段保存的字符串,然后用它测试regex。

你应该使用,

1
2
var myEmailRegEx = new RegExp("/\w+@\w+\.[a-z]|[A-Z]|\d|\.|-{2,}")
myEmailRegEx.test(document.getElementById("EmailAddress").value)

假设电子邮件地址以id="my_form"的形式存在。为了防止默认提交该表单,您将使用

1
$("#my_form").preventDefault();

如果电子邮件被证明是真的,那么你可以提交表单。

1
2
3
if(myEmailRegEx.test(document.getElementById("EmailAddress").value)){
   document.getElementById("mu_form").submit();
}

应该就是这样。我希望您知道在哪里插入这些代码片段:—)


虽然这并不能直接回答你的问题,但应该注意的是,你的regex返回了很多错误的否定。例如,地址中带有.的电子邮件地址,例如我的个人电子邮件地址,[email protected]

一个好的起点是从这里开始

为了方便起见,我将复制下面的"基本"电子邮件regex。

1
^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$

尝试在包含电子邮件的输入字段上使用onchange事件。例如:

1
2
3
<input type="text" name="Email" id="EmailAddress" size="50" onchange="validateEmail();" />
<br />
<input type="submit" value="Submit Email"/>

当该字段中的值发生变化时,上述方法将调用您的validateEmail函数。