Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   поиск в русской строке вводя английские символы (https://javascript.ru/forum/jquery/61440-poisk-v-russkojj-stroke-vvodya-anglijjskie-simvoly.html)

git_bind 18.02.2016 13:05

поиск в русской строке вводя английские символы
 
Собственно вопрос заключается в заголовке темы.
Как реализовать поиск по строке с русскими буквами вводя английские символы, т.е. научить понимать что хочет ввести пользователь.

git_bind 19.02.2016 08:37

никто так и не ответит? никто не задавался данным вопросом что ли?

krasovsky 19.02.2016 08:39

Спроси гугл :D

Или к примеру задать соответствие раскладок русская-английская и при поиске мапить

git_bind 19.02.2016 10:52

не отвечает гугл
может как то возможно с помощью словаря?

рони 19.02.2016 11:20

git_bind,
https://yandex.ru/soft/punto/

git_bind 19.02.2016 11:26

Цитата:

Сообщение от рони (Сообщение 408411)

это конечно хорошо, но мне необходим почти тот же функционал только на сайте. идеальный пример, это сайт 2gis(не реклама). там не важно на какой раскладке вводишь, поисковая строка понимает что хотят найти

destus 19.02.2016 11:58

git_bind,
сделай словарик типо
replacer = {
                "q": "й", "w": "ц", "e": "у", "r": "к", "t": "е", "y": "н", "u": "г",
                "i": "ш", "o": "щ", "p": "з", "[": "х", "]": "ъ", "a": "ф", "s": "ы",
                "d": "в", "f": "а", "g": "п", "h": "р", "j": "о", "k": "л", "l": "д",
                ";": "ж", "'": "э", "z": "я", "x": "ч", "c": "с", "v": "м", "b": "и",
                "n": "т", "m": "ь", ",": "б", ".": "ю", "/": "."
            };


и через Str.replace заменяй.

Vlasenko Fedor 19.02.2016 12:05

<div id="replace">
    <input type="text" class="street edit-state-street" maxlength="50" />
</div>
<script>
replace.oninput = function (e) {
    var el = e ? e.target : window.event.srcElement;
    if (el.tagName != "INPUT") return;
    var replacer = {
        "q": "й",
        "w": "ц",
        "e": "у",
        "r": "к",
        "t": "е",
        "y": "н",
        "u": "г",
        "i": "ш",
        "o": "щ",
        "p": "з",
        "[": "х",
        "]": "ъ",
        "a": "ф",
        "s": "ы",
        "d": "в",
        "f": "а",
        "g": "п",
        "h": "р",
        "j": "о",
        "k": "л",
        "l": "д",
        ";": "ж",
        "'": "э",
        "z": "я",
        "x": "ч",
        "c": "с",
        "v": "м",
        "b": "и",
        "n": "т",
        "m": "ь",
        ",": "б",
        ".": "ю",
        "/": "."
    };
    var str = el.value;
    
    el.value = str.replace(/[A-z/,.;\'\]\[]/g, function (x) {
       return x == x.toLowerCase() ? replacer[x] : replacer[x.toLowerCase()].toUpperCase();
    });
};
</script>

git_bind 19.02.2016 13:33

спасибо больше! реально полезный код. но у меня теперь возникает вопрос, как быть с английскими словами? объясню наглядно для чего вся эта затея.
имеется таблица, в ней записаны значения:

|имя слоя | источник|
|геоданные 2015 |http://localhost/.....|
|cosmo_tile_2015 |http://localhost/.....|
ну и много другое(порядка 200 шт.)
сейчас поиск реализован с помощью jquery.filtertable
поиск устраивает, но увидев на вышеупомянутом сайте функционал поисковой строки, захотел подобное реализовать.
т.е. вводя "геодан" не сменив раскладку фильтровалось так же, как и вводя на русском "геодан". ну и аналогично с "cosmo"

destus 19.02.2016 13:47

git_bind,
фильтровать сначала по одному, потом попытаться по-другому, если для первого случая неудачно. Допустим вводим utjlfyyst (геоданные) и фильтруем сначала для первого случая, потом для второго. Я не думаю, что в таблице будут записи типа 'utjlfyyst...'

laimas 19.02.2016 17:58

Цитата:

Сообщение от git_bind
захотел подобное реализовать.
т.е. вводя "геодан" не сменив раскладку фильтровалось так же, как и вводя на русском "геодан". ну и аналогично с "cosmo"

Кто вам мешает делать это на сервере средствами SQL?

Про "азбуку" уже вам показали, и на сервере это будет массив, написали "геодан", и если национальные это ключ, значит делаем запрос на выборку ключа "геодан" ИЛИ по значению его (латиница), и наоборот, если национальные это значение, ищем в массиве значение, получаем ключ его ну а далее опять запрос по двум значениям. Если в базе есть, гарантировано по одному из условий будет получено.

git_bind 20.02.2016 08:07

Цитата:

Сообщение от laimas (Сообщение 408465)
Кто вам мешает делать это на сервере средствами SQL?

Про "азбуку" уже вам показали, и на сервере это будет массив, написали "геодан", и если национальные это ключ, значит делаем запрос на выборку ключа "геодан" ИЛИ по значению его (латиница), и наоборот, если национальные это значение, ищем в массиве значение, получаем ключ его ну а далее опять запрос по двум значениям. Если в базе есть, гарантировано по одному из условий будет получено.

Эти данные не хранятся в SQL базе, они подтягиваются с геосервера и отображаются на html-странице, по этому необходим такой алгоритм локальный средствами js или jquery


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