-1

我有一个关于使用 JavaScript 进行用户输入验证的小问题。

以下是我编写的代码。当此代码没有第二次验证时,它可以工作。当我包含第二次验证时,即使第一次验证也不起作用。

忘记我提到的那个 www.bbc.co.uk。

<!DOCTYPE html>
<html>
<head>
<script>

function validateForm() {
    /* first validation */
    var eml = document.forms["myForm"]["email"].value;
    if (eml == null || eml == "") {
        alert("Email Address must be filled out");
        return false;
    }

    /* second validation */
    var reg = /^([A-Za-z0-9._-])+@[A-Za-z0-9.-])+\.([A-Za-z]{2,4})$/;
    if (reg.test(document.forms["myForm"]["emaill"].value) == false) {
        alert("Invalid Email - Reg Function");
        document.getElementById("email").focus();
        return false;
    }
}

</script>
</head>

<body>
<form name="myForm" action="www.bbc.co.uk" onsubmit="return validateForm()" method="post">
    Email Address: <input type="text" name="email">
    <input type="submit" value="Submit">
</form>
</body>

</html>
4

3 回答 3

3

您的代码不仅存在拼写错误问题。我半重写了你的函数,这里简要解释了我所做的。

以前,您返回false两次,但从未返回true。为了onSubmit()工作,您必须返回两者之一。您应该创建一个flag变量并将其最初设置为false. 满足所有验证条件后,将其设置为 true。在函数结束时,return flag.

其次,你试图抓住emailid来设置focus()它,即使它没有id设置。为此,只需将表单元素设置为变量,然后将元素值设置为不同的变量,因此在函数执行过程中您可以同时访问 (emlemlVal)

第三,您的正则表达式无效。这里显示的正则表达式是从这里提取的: Validate email address in JavaScript?

此外,您应该三思而后行,因为正则表达式可能不符合 RFC: Using a regular expression to validate an email address

第四,电子邮件被错误地从DOM. email您在代码的一部分中拼写错误。抓住你需要的元素var eml = document.myForm.email。这将为您提供email输入元素,然后您可以使用eml.value.

最后,除非我忘记了什么,否则最初的逻辑不if...else应该是&& (and)|| (or)

function validateForm() {
    var flag = false;
    /* first validation */
    var eml = document.myForm.email;
    var emlVal = eml.value;
    if (emlVal !== null && emlVal !== "") {
        var reg =/^(([^<>()[\]\\.,;:\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,}))$/;
        if (!reg.test(emlVal)) {
            alert("Invalid Email - Reg Function");
            eml.focus();
        }
        else {
            flag = true;
        }
    }
    else {
        alert("Email is required");
    }
    return flag;

    /* second validation */
}

jsFiddle

于 2013-05-07T22:55:44.327 回答
3

您在这一行中拼错了“电子邮件”:

if (reg.test(document.forms["myForm"]["emaill"].value) == false) 

无论如何都没有理由从 DOM 中重新获取值;你已经在函数的前面做过了。

if (!reg.test(eml))

足够的。明确地与布尔常量进行比较通常是一个坏主意。这不一定是错的,但很少有必要,如果你不习惯这种语言,它可能会导致奇怪的事情发生。

于 2013-05-07T22:34:07.300 回答
1

你有一个错字:正确emaillemail.

于 2013-05-07T22:34:39.793 回答