Поиск без учета регистра - PullRequest
262 голосов
/ 07 октября 2008

Я пытаюсь получить регистронезависимый поиск с двумя строками в JavaScript.

Обычно это было бы так:

var string="Stackoverflow is the BEST";
var result= string.search(/best/i);
alert(result);

Флаг /i будет для регистра без учета регистра.

Но мне нужно искать вторую строку; без флага работает отлично:

var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(searchstring);
alert(result);

Если я добавлю флаг /i в приведенный выше пример, он будет искать строку поиска, а не то, что находится в переменной "строка поиска" (следующий пример не работает):

var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(/searchstring/i);
alert(result);

Как мне этого добиться?

Ответы [ 11 ]

0 голосов
/ 03 декабря 2014

Я заметил, что если пользователь вводит строку текста, но оставляет ввод без выбора каких-либо параметров автозаполнения, никакие значения не устанавливаются в скрытом вводе, даже если строка совпадает со значением в массиве. Итак, с помощью других ответов я сделал это:

var $local_source = [{
        value: 1,
        label: "c++"
    }, {
        value: 2,
        label: "java"
    }, {
        value: 3,
        label: "php"
    }, {
        value: 4,
        label: "coldfusion"
    }, {
        value: 5,
        label: "javascript"
    }, {
        value: 6,
        label: "asp"
    }, {
        value: 7,
        label: "ruby"
    }];
    $('#search-fld').autocomplete({
        source: $local_source,
        select: function (event, ui) {
            $("#search-fld").val(ui.item.label); // display the selected text
            $("#search-fldID").val(ui.item.value); // save selected id to hidden input
            return false;
        },
        change: function( event, ui ) {

            var isInArray = false;

            $local_source.forEach(function(element, index){

                if ($("#search-fld").val().toUpperCase() == element.label.toUpperCase()) {
                    isInArray = true;
                    $("#search-fld").val(element.label); // display the selected text
                    $("#search-fldID").val(element.value); // save selected id to hidden input
                    console.log('inarray: '+isInArray+' label: '+element.label+' value: '+element.value);
                };

            });

            if(!isInArray){

                $("#search-fld").val(''); // display the selected text
                $( "#search-fldID" ).val( ui.item? ui.item.value : 0 );

            }
        } 
...