我有一个用jQuery自动完成搜索数据库的输入。它运行得很好,但我希望它对一些字符更加宽容。假设在数据库中,数据是:oc-5,我需要请求的字符串、oc5、或oc_5来匹配数据库中的当前字符串。
如果数据库中的当前值是ac2,则需要a-c-2或ac_2或ac-2或ac 2E 215来匹配该值。
实际上,我希望角色"-“、"_”和“”表现得像通配符。
我想我得调整一下我的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);
});
}
});发布于 2020-05-08 15:20:53
由于您希望做到这两种方式,所以可以在使用替换后检查这两个值是否匹配,如果是这样,则使请求值与数据库值相等。
其中db_val是您的数据库值,rq_val是发送的请求值。
if (db_val.replace(/[-_\s]/g, "") == rq_val.replace(/[-_\s]/g, "")) {
rq_val = db_val;
}如果不希望在字符串的开头或结尾允许列出的一个特殊字符,并且不允许一行中有多个特殊字符,则可以使用以下regex:.replace(/^(?:[^-_\s][-_\s]?){3}(?<![-_\s])$/, "")。这意味着检查任何字符(不包括特殊字符,后面是特殊的重复三次),并确保字符串的结尾没有特殊字符。
我不擅长regex,但这就是我想出来的。
发布于 2020-05-08 00:33:45
考虑以下代码:
$(".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>
https://stackoverflow.com/questions/61666226
复制相似问题