我的输入类型="文字"没有正确验证我的电子邮件地址

时间:2014-10-30 22:48:02

标签: javascript html css validation html-form

function valid(valid){

    if (valid.value !== null && valid.value !== ""){
        valid.id = "success";
}}

function validEmail(valid){

    var atpos = valid.value.indexOf("@");
    var dotpos = valid.value.lastIndexOf(".");

    if (atpos > 0 && dotpos > atpos+1 && dotpos+2 < valid.length){
        valid.id = "success";
}}

当用户在文本框中输入电子邮件地址时,我使用onkeyup来调用函数validEmail()。即使我输入有效的电子邮件地址,ID也不会改为&#34;成功。&#34; (id="success"所做的只是将输入变为绿色背景。)

有谁知道我做错了什么?我希望在输入有效的电子邮件时文本框变为绿色。

另外,我在onsubmit上调用相同的函数,然后就可以了。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您的代码正在调用&#34; valid.length&#34;没有定义。

固定代码为:

function validMe(object){ 
    var atpos = object.value.indexOf("@");
    var dotpos = object.value.lastIndexOf(".");

    if (atpos > 0 && dotpos > atpos+1 && dotpos+2 < object.value.length) {
        object.id = "success";
    }
}

http://jsfiddle.net/suugqrdz/

上进行测试

另外,作为建议,使用正则表达式验证电子邮件,它比自己提供电子邮件更容易,更可靠。

编辑正则表达式

function validMe(object){ 
    var atpos = object.value.indexOf("@");
    var dotpos = object.value.lastIndexOf(".");

    if(atpos < 0 && dotpos < 0) {
        object.id = "default";
        return; //So you don't test unnecessarily
    }

    //var againAnotherMatch = /.+@.+\..+/;
    //var anotherMatch = /(.+)@(.+){2,}\.(.+){2,}/;
    var match = /^(([^<>()[\]\\.,;:\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 (match.test(object.value)) {
        object.id = "success";
    }
    else {
        object.id = "default";
    }
}

http://jsfiddle.net/suugqrdz/1/

答案 1 :(得分:0)

我建议您使用插件来实现您的目标,而不是尝试自己验证电子邮件地址。有些边缘情况会使您的验证失败,但实际上仍然是有效的电子邮件地址。

我建议您使用以下插件

http://jqueryvalidation.org/

或者,如果你觉得这个解决方案(正如戴夫指出的那样)对你的需求来说太过分了。有关一个简单的示例,请参阅此帖

Super simple email validation with javascript

相关问题