2012-03-17 81 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

相關問題