使用indexOf检查的一个字符串多个变量

时间:2012-03-17 00:37:36

标签: javascript jquery string indexof

我已经为我们的表单添加了一些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(" "); }

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

一旦我对此进行了排序,最后一步将确定如何保留姓氏值,以便在输入其他名称并再次调用脚本时进一步向下,它可以检查是否选择了姓氏匹配新条目并绕过模式弹出窗口。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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(" "); 
    }
}

答案 2 :(得分:0)

可能最好使用regexps,例如:

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);
});

实例: