Регулярное выражение для замены определенных символов на автозаполнение JQuery ui - PullRequest
0 голосов
/ 07 мая 2020

У меня есть ввод, который выполняет поиск в базе данных с помощью jQuery автозаполнения. Он работает хорошо, но я хочу, чтобы он был более снисходительным к некоторым персонажам. Допустим, в базе данных есть следующие данные: o c -5 Мне нужна запрошенная строка oc5 или oc_5 , чтобы соответствовать текущей строке в базе данных.

То же, если текущее значение в базе данных ac2 , мне нужно a- c -2 или ac_2 или a c -2 или a c 2 , чтобы соответствовать значению.

На самом деле, я хочу, чтобы символы «-», «_» и «» действовали как подстановочный знак.

Думаю, мне нужно повторно выразить мой request.term , но я не уверен, как это сделать.

Вот мой код:

$(".autocomplete").autocomplete({  

    delay: 100,
    source: function (request, response) {

        // Suggest URL
        var datatype = this.element.attr('data-type');
        var suggestURL = href+"&datatype="+datatype+"&term="+request.term;

        // JSONP Request
        $.ajax({
            method: 'POST',
            url: suggestURL             
        })
        .success(function(data){
            response(data);
        });
    }
});

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

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

где db_val - значение вашей базы данных, а rq_val - значение отправленного запроса.

if (db_val.replace(/[-_\s]/g, "") == rq_val.replace(/[-_\s]/g, "")) {
    rq_val = db_val;
}

Если вы не хотите разрешать использование одного из перечисленных специальных символов в начале или конце строки, и вы не можете разрешить несколько специальных символов подряд, вы можете использовать это регулярное выражение: .replace(/^(?:[^-_\s][-_\s]?){3}(?<![-_\s])$/, ""). Это означает проверку любого символа, за исключением специальных, за которыми следует специальный, повторяемый три раза, и убедитесь, что концу строки не предшествует специальный.

Я не очень хорош в регулярных выражениях, но это то, что я пришел вверх с.

2 голосов
/ 08 мая 2020

Рассмотрим следующий код:

$(".autocomplete").autocomplete({
  delay: 100,
  source: function(request, response) {
    // Suggest URL
    var datatype = this.element.attr('data-type');
    var term = request.term;
    // Example: 'a-c-2' or 'ac_2' or 'ac-2' or 'ac 2'
    term = term.replace(/(-|_|\s)/g, "");
    // Result: ac2
    var suggestURL = href + "&datatype=" + datatype + "&term=" + term;
    $.ajax({
        method: 'POST',
        url: suggestURL
      })
      .success(function(data) {
        response(data);
      });
  }
});

Вы можете обновить Срок перед его отправкой и удалить любой из символов "-", "_" или " " из строки с .replace() с использованием регулярного выражения.

Рабочий пример.

$(function() {
  $("button").click(function() {
    var term = $("input").val();
    console.log(term.replace(/(-|_|\s)/g, ""));
  });
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Search: <input type="text" /> <button>Test</button></p>
...