1

Я хочу найти значение в массиве, но поиск должен игнорировать буквы нижнего/верхнего регистра. Как это сделать?Игнорировать регистр, чувствительный к регистру в массиве?

Это мой код:

$.ajax({ 
type: "GET", 
url: "ajax.php", 
dataType: "json", 
data: { pageType: pageType, input: request.term, dataString: 'getPageInfo' }, 
success: function(data) 
{            
var values = $.map(data, function(item) { return {id: item.id, label: item.label, value: item.value}; }); 
for (var i = 0; i < values.length; i++) { 
    if (values[i].label.split(',').indexOf(request.term) >= 0) { 
     var found = values[i]; 
    } 
}  
if (!found) values.push({id: 0, label: request.term + ' hinzufügen', value: request.term}); 
response(values);  

Речь идет о давая возможность создать новую запись, если вход уже совпадает с записью, чтобы предотвратить создание дубликатов записей пользователя, как вы можете увидеть в последней строке , request.term - это значение, введенное пользователем, а values - это массив.

Так, например, если я ищу «berlin» или «BERLIN» или «bERLiN», и запись в моей базе данных «Berlin», то она должна пометить этот элемент как найденный в массиве.

+2

Вы пробовали сопоставления строк с toLowerCase()? http://www.w3schools.com/jsref/jsref_tolowercase.asp –

ответ

6

Одним из вариантов было бы заставить вещи прописные или строчные заранее:

var iterm = request.term.toLowerCase(); 
// ... 
if (values[i].label.toLowerCase().split(',').indexOf(iterm) >= 0) { 

В качестве альтернативы вы можете превратить request.term в регистронезависимом регулярное выражение, но при этом включает в себя спасаясь все символы в нем что может быть особенным в регулярных выражениях, что является болью. Вам нужно было бы просмотреть лот значений для toLowerCase накладных расходов, чтобы я хотел посмотреть на эту сложность.

+0

Английский не мой родной язык, поэтому я прошу вас убедиться: вы имеете в виду, если в моей базе данных есть много значений, содержащих специальные символы, такие как '% $ §'? Потому что есть только допустимые значения, которые содержат пробел, обычные буквы и цифры. –

+0

@Vaia: Я говорю о специальных символах в 'request.term', а не' values ​​[i] .label'. В регулярных выражениях есть много символов со специальным значением, например '.'. –

+0

Да, как 'request.term', так и' values ​​[i] .label' не могут содержать специальные символы. Это будет проверено на стороне сервера в 'ajax.php', и пользователь получит сообщение об ошибке, если есть что-то еще, кроме буквы, цифры или пробела. Это обычная точка, которую вы показали в качестве примера? –

2

Преобразование значения и термина в нижний регистр:

if (values[i].label.toLowerCase().split(',').indexOf(request.term.toLowerCase()) >= 0) { 
    var found = values[i]; 
} 
Смежные вопросы