0

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

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

1 代表当我输入 john.doe@gmail.com
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,汤姆

4

1 回答 1

1

if ((uid = null) ...

这设置uid为 null,并“返回”null(分配的值),因此导致您的语句始终失败。

改为使用==,或更清晰地使用if( !uid && email_eval)

于 2013-06-17T21:02:20.497 回答