2012-03-17 82 views
2

我已经为我们的表单写了一个小的JQuery/Javascript添加,它接受一个单一的全名输入并将它分解为名和姓组件。如果输入中有三个或更多名称并询问哪个组合是正确的,它将打开一个模式。一个字符串多个变量与索引检查

我的下一步是找到并剥离可能已输入的任何后缀,如Jr,Sr,III等。我目前剥离了最后四个字符并使用indexOf检查它们是否包含后缀字符串(Jr,Sr,III等)。但每一行只检查一个可能的后缀,我想知道是否有一些js的魔术会在一行中检查多个后缀。我当前的代码如下:

var nameVal = $('#name').val();  
var suffix = nameVal.slice(-4); 
if (suffix.toLowerCase().indexOf(" jr") != -1) { 
    var nameSplit = nameVal.slice(0, -3).split(" "); 
} elseif (suffix.toLowerCase().indexOf(" iii") != -1) { 
    var nameSplit = nameVal.slice(0, -4).split(" "); 
} else { 
    var nameSplit = nameVal.split(" "); } 

我总是可以做的很好的老||并且使用不同的indexOf值继续添加额外的(suffix.toLowerCase()。indexOf(“jr”)!= -1),但是我希望尽可能保持代码更紧凑,我的“小”脚本已经是3k。

一旦我得到这个排序,最后一步将确定如何保留姓氏值,这样当进入其他名字并再次调用脚本时,可以进一步下载表单,它可以检查是否选择最后一个名称与新条目匹配并绕过模式弹出。

+0

当你在这样的块内定义变量时,你将会有非常意想不到的结果。了解更多关于范围和提升的信息[here](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Histing) – jbabey 2012-03-17 00:46:19

+0

@jbabey:这是一个很难解决的问题,除非在代码中声明它们之前使用变量。而且,大多数人使用'for(var i = 0; i 2012-03-17 00:56:42

回答

2

您可以使用正则表达式。尝试这样的事情;

nameVal = nameVal.replace(/ (jr|sr|I?II)$/gi, ""); 

更详细地说,

(jr|sr|I?II) = jr or sr or II or III 
$ = at the end of line 
/i = case insensitive 
/g match globally 
+0

我知道必须有更好的方法。谢谢,这就像一个魅力。 – Tom 2012-03-17 00:51:25

+0

不完全确定OP的意图,但是/ g也可能是为了 – jbabey 2012-03-17 00:51:28

+0

a/g会做什么? – Tom 2012-03-17 00:52:22

0

在这种情况下,我一般都值的数组,(因为我不擅长用正则表达式)

var suffixArr = [' jr',' iii', ' ii']; 

//then run a loop 

for(var i = 0; i < suffixArr.length;i++){ 
    if(suffixArr[i].toLowerCase().indexOf(suffixArr[i]) != -1){ 
     nameSplit = nameVal.slice(0, - suffixArr[i].length).split(" "); 
    } 
} 
0

可能最好使用正则表达式这一点,例如:

var names = [ 
    "Joe Jr.", 
    "Mark Sr.", 
    "Loui III", 
    "Mark Lockering", 
]; 

var suffixRes = [ 
    /Jr\.$/, /Sr\.$/, 'III', 
]; 
$(names).each(function(i, name) { 
    var str = name; 
    $(suffixRes).each(function(j, suffixRe) { 
     str = str.replace(suffixRe, ''); 
    }); 
    console.log(str); 
}); 

活生生的例子:

+0

我只希望一次处理一个名称,这个名称是在我们的网页上输入的一个表单输入。 – Tom 2012-03-17 01:06:27

+0

同意,我说的是显示不同输入的输出,没有别的。只需使用该函数的要点(即在主函数周围删除'$(names).each(...)')。 – 2012-03-17 01:14:51

相关问题