我已经为我们的表单添加了一些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。
一旦我对此进行了排序,最后一步将确定如何保留姓氏值,以便在输入其他名称并再次调用脚本时进一步向下,它可以检查是否选择了姓氏匹配新条目并绕过模式弹出窗口。
答案 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);
});
实例: