Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 键入时验证电子邮件_Javascript_Regex_Validation - Fatal编程技术网

Javascript 键入时验证电子邮件

Javascript 键入时验证电子邮件,javascript,regex,validation,Javascript,Regex,Validation,我想在键入时验证输入,因此我使用onkeyup事件来验证输入,但如果我验证电子邮件正则表达式“name@domain.com“,一旦用户开始键入,它将抛出一个错误-第一个字符与regex不匹配 所以我写了这个: var addValidation = function (patterns) { var index = patterns.length; //I know I can avoid this while (index--) { p

我想在键入时验证输入,因此我使用onkeyup事件来验证输入,但如果我验证电子邮件正则表达式“name@domain.com“,一旦用户开始键入,它将抛出一个错误-第一个字符与regex不匹配

所以我写了这个:

var addValidation = function (patterns) {
        var index = patterns.length; //I know I can avoid this
        while (index--) {
            patterns[index] = new RegExp(patterns[index]);
        }

        index = 0;
        var current = patterns[index],
        matchExact = function (patt, str) {
            var match = str.match(patt);
            return match !== null && str === match[0];
        };

        return function () {
            var str = this.value;
            if (!matchExact(current, str) ) {
                var tmp = patterns[index + 1] ? 
                    new RegExp(current.source + patterns[index + 1].source) :
                    false;
                if (tmp && matchExact(tmp, str)) {
                    current = tmp;
                    index++;
                }
                else {
                    alert("Wrong");
                }
            }
        }
    };
    document.getElementById("x").onkeyup = addValidation(["[a-zA-Z0-9\\.]+", "@{1}", "[a-zA-Z0-9]+", "\\.{1}", "[a-zA-Z]{1,3}"]);
这似乎有效,但是。。。它很难看,如果你后退一步,它会提醒你(例如,“name@”,然后按backspace)

我知道Dojo的验证非常好,但我不想使用Dojo。有没有更好的方法来实现这一点


//编辑:这是一个示例,但您可以定义自己的模式(如email regex),它将完美地对其进行验证。

在验证开始之前添加间隔:

var t;
document.getElementById("x").onkeyup = function () {
    if (t) {
        clearTimeout(t);
    }
    t = setTimeout(function () {
        //do validation
    }, 1000)
}

永远不要尝试用常规表达式验证电子邮件地址。你要么允许使用无效的地址,要么阻止完全有效的电子邮件地址,这只会让访问者感到恼火。值得注意的是,迄今为止验证电子邮件地址的最佳正则表达式如下:


如果有许多领域,Thas似乎是一个相当麻烦的问题。最好使用一些关键的动作链接事件。不要确切地提到这段代码。我刚刚演示了如何解决这样的问题