用JQuery ui自动完成功能替换某些字符的正则表达式

问题描述 投票:0回答:2

我有一个输入,它使用jquery自动完成功能在数据库中搜索。它运行良好,但我希望它在某些字符方面更加宽松。假设数据库中的数据为:oc-5我需要请求的字符串oc5oc_5以匹配数据库中的当前字符串。

如果数据库中的当前值是ac2,则我需要ac-2ac_2ac-2ac 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); }); } });

jquery regex ajax jquery-ui autocomplete
2个回答
0
投票
请考虑以下代码:

$(".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>

0
投票
由于您想同时使用两种方法,因此可以在使用替换后检查两个值是否匹配。

其中db_val是您的数据库值,rq_val是已发送的请求值。

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

如果不想在字符串的开头或结尾处允许列出的特殊字符之一,并且不想在一行中同时允许多个特殊字符,则可以使用以下正则表达式:.replace(/^([^-_\s][-_\s]?){3}(?<![-_\s])$/, "")。这意味着检查除特殊字符外的任何字符,然后进行三次特殊字符检查,并确保字符串的末尾没有特殊字符。

我对正则表达式不是很好,但这就是我想出的。

© www.soinside.com 2019 - 2024. All rights reserved.