JavaScript中的RegEx基于外部验证器未按预期工作

时间:2013-06-17 20:59:42

标签: javascript regex

我正在使用位于此处的javascript正则表达式编辑器:Scriptular正在按预期工作,因此我认为我的RegEx很好,但我刚刚开始工作并使用RegEx学习我可能不会使用JS实现RegEx。

计划:用户填写表单,然后评估输入的值以确定它是电子邮件地址还是UID(用户ID)。如果是电子邮件,只要通过一个相当简单的RegEx,我们就会接受它。如果它没有通过,那么我们评估表单字段以查看它是否是UID的有效格式(我们稍后会对此进行更多检查),如果两者都失败,我们会向用户发送一条警告,说明该值输入不被接受为有效的电子邮件或UID。这是目标。它仅供内部使用,因此不会尝试针对它进行所有可能的电子邮件测试。对于UID,下面的RegEx一直在为我们工作。

当我输入john.doe@gmail.com时,

1表示 2表示何时输入ab1234

for (var i=0,max=tagArray.length;i<max;i++) {    
    var n = tagArray[i];    
    var uid_regex = /^[a-z]{2}\d{3}[a-z0-9]{1}$/i;  
    var email_regex = /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i;
    var email_eval  = n.match(email_regex);    
    var uid = n.match(uid_regex);    
    console.log(n + ' evaluates to (email/uid): ' + email_eval + ' and ' + uid);    
    //1 log shows when john.doe@gmail.com is entered: john.doe@gmail.com evaluates to (email/uid): john.doe@gmail.com and null 
    //2 log shows when ab1234 is entered: ab1234 evaluates to (email/uid): null and ab1234
    if ((uid = null) && ( email_eval != null)){    
        //  $("##scheduleDist").tagit("createTag", n);    
        console.log('The value entered is an email address: ' + email_eval);    
    }    
    else if ((uid != null) && ( email_eval = null)){    
        console.log('The value entered is a UID: ' + n);    
    }    
    else {    
        console.log( n + ' is not a valid entry. Email Validation: ' + email_eval + '    UID Validation: ' + uid );    
        //1 log shows: john.doe@gmail.com is not a valid entry. Email Validation: john.doe@gmail.com    UID Validation: null
        //2 log shows:  ab1234 is not a valid entry. Email Validation: null    UID Validation: null             
    return false;    
}    

注意: 在尝试将其格式化为SO时,我希望不会弄乱脚本。在FF或IE或Chrome中没有显示JS错误,因此如果语法错误,那是因为我的格式化。

冒着偏向于人们答案的风险,我确实认为我的问题在第10行和/或第14行(if和else if条件行)。

如果我没有说清楚,请告诉我。

TIA, 汤姆

1 个答案:

答案 0 :(得分:1)

if ((uid = null) ...

这会将uid设置为null,并且“返回”null(已分配的值),从而导致语句始终失败。

使用==代替if( !uid && email_eval)