Одна строка с несколькими переменными для проверки с помощью indexOf - PullRequest
2 голосов
/ 17 марта 2012

Я написал небольшое дополнение 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(" "); }

Я всегда могу сделать старый добрый ||и продолжаю добавлять extra (suffix.toLowerCase (). indexOf ("jr")! = -1) с другим значением indexOf, но я надеюсь сохранить код более компактным, если это возможно, мой "маленький" скрипт уже 3k.

После того, как я это отсортирую, последним шагом будет выяснение того, как сохранить значение фамилии, чтобы далее вниз по форме при вводе других имен и повторном вызове сценария он мог проверить, чтобы увидеть,выбранное имя совпадает с новой записью и пропускает модальное всплывающее окно.

Ответы [ 3 ]

2 голосов
/ 17 марта 2012

Вы можете использовать регулярное выражение.Попробуйте что-то вроде этого;

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 голосов
/ 17 марта 2012

Вероятно, лучше использовать для этого регулярные выражения, например:

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 голосов
/ 17 марта 2012

В этом случае я обычно делаю массив значений (потому что я плохо разбираюсь в регулярных выражениях)

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(" "); 
    }
}
...