我正在使用位于此处的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, 汤姆
答案 0 :(得分:1)
if ((uid = null) ...
这会将uid
设置为null,并且“返回”null(已分配的值),从而导致语句始终失败。
使用==
代替if( !uid && email_eval)