Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Помогите подправить поиск на сайте (https://javascript.ru/forum/dom-window/76592-pomogite-podpravit-poisk-na-sajjte.html)

рони 25.01.2019 12:38

laimas,
если работает(сработает) лучше не трогать :)

laimas 25.01.2019 12:40

рони, ну если ввод к примеру будет таким
' Galaxy     samsung  '
, то шаблон получится такой
'Galaxy|    samsung'
.

Alexko64 25.01.2019 12:58

Цитата:

Сообщение от рони (Сообщение 502650)
laimas,
если работает(сработает) лучше не трогать :)

Не повезло)
Не работает, при поиске Samsung, второй вариант что начинается на Galaxy уже не находит

laimas 25.01.2019 13:01

Цитата:

Сообщение от Alexko64
второй вариант что начинается на Galaxy уже не находит

Что-то какая-то тайна покрытая мраком, ну не может быть такого. :)

var s = 'Samsung Galaxy', //в чем ищем
    v = ' Galaxy     samsung  ', //пусть ввели так
    r = new RegExp(v.trim().replace(/\s+/, '|'), 'gi'); //определяем шаблон поиска

alert(r.test(v)) //есть совпадение?


И если строка в которой ищем будет 'Galaxy Samsung', все равно будет найдено совпадение.

PS. рони подправил код, а вы скопировали до правки, проверьте еще раз, может в этом причина.

Alexko64 25.01.2019 13:10

Цитата:

Сообщение от laimas (Сообщение 502655)
Что-то какая-то тайна покрытая мраком, ну не может быть такого. :)

var s = 'Samsung Galaxy', //в чем ищем
    v = ' Galaxy     samsung  ', //пусть ввели так
    r = new RegExp(v.trim().replace(/\s+/, '|'), 'gi'); //определяем шаблон поиска

alert(r.test(v)) //есть совпадение?


И если строка в которой ищем будет 'Galaxy Samsung', все равно будет найдено совпадение.

Лучше один раз увидеть чем 100 раз услышать )
Вот залил на тест хост
http://mobidor.zzz.com.ua/test.php

Alexko64 25.01.2019 13:11

Цитата:

Сообщение от laimas (Сообщение 502655)

PS. рони подправил код, а вы скопировали до правки, проверьте еще раз, может в этом причина.

Момент...

Alexko64 25.01.2019 13:14

Ну какая тайна, разбираем-же пример. не работает, на хостинге можно проверить где я залил
http://mobidor.zzz.com.ua/test.php

laimas 25.01.2019 13:31

А так:

pattern = new RegExp(pattern.trim().replace(/\s+/g, "|"), "gi"); 
return arr.filter(function(el) {
                //return Object.values(el).some(function(val) {
                        return pattern.test(Object.values(el)[0])
                //})
        })


А отображать и надо одно совпадение, которое начинается с первого введенного в поиске?

рони 25.01.2019 13:40

Alexko64,
замените
function fnSearch(arr, pattern) {
        pattern = escapeRegExp(pattern);
        pattern = new RegExp("(" + pattern.trim().replace(/\s+/g, "|") + ")", "i");
        return arr.filter(function(el) {
                pattern.lastIndex = 0;
                return pattern.test(el.name)
        })
};

Alexko64 25.01.2019 13:42

Цитата:

Сообщение от laimas (Сообщение 502660)
А так:

pattern = new RegExp(pattern.trim().replace(/\s+/g, "|"), "gi"); 
return arr.filter(function(el) {
                //return Object.values(el).some(function(val) {
                        return pattern.test(Object.values(el)[0])
                //})
        })


А отображать и надо одно совпадение, которое начинается с первого введенного в поиске?

Не работает. Перезалил тест, посмотрите. Тееперь там все плохо.
попробуйте найти Galaxy, Samsung note 6 (его там и в помине нет но поиск выдает результат)
Добавил RAM для отличий между вариантами.
Отображать надо все совпадения которые подходят под шаблон, как в любом поиске


Часовой пояс GMT +3, время: 20:16.