我有一个输入,它使用jquery自动完成功能在数据库中搜索。它运行良好,但我希望它在某些字符方面更加宽松。假设数据库中的数据为:oc-5我需要请求的字符串oc5或oc_5以匹配数据库中的当前字符串。
如果数据库中的当前值是ac2,则我需要ac-2或ac_2或ac-2或ac 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);
});
}
});
$(".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>
其中db_val
是您的数据库值,rq_val
是已发送的请求值。
if (db_val.replace(/[-_\s]/g, "") == rq_val.replace(/[-_\s]/g, "")) {
rq_val = db_val;
}
如果不想在字符串的开头或结尾处允许列出的特殊字符之一,并且不想在一行中同时允许多个特殊字符,则可以使用以下正则表达式:.replace(/^([^-_\s][-_\s]?){3}(?<![-_\s])$/, "")
。这意味着检查除特殊字符外的任何字符,然后进行三次特殊字符检查,并确保字符串的末尾没有特殊字符。我对正则表达式不是很好,但这就是我想出的。