正则表达式用 JQuery ui 自动完成替换某些字符
Regex to replace certain characters with JQuery ui autocomplete
我有一个搜索数据库的输入 jQuery 自动完成。它运作良好,但我希望它对某些角色更加宽容。假设数据库中的数据是:oc-5 我需要请求的字符串 oc5 或 oc_5匹配数据库中的当前字符串。
如果数据库中的当前值为ac2,我需要a-c-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])$/, "")
。这意味着检查除特殊符号外的任何字符后跟一个特殊符号重复三次,并确保字符串的末尾前面没有特殊符号。
我不太擅长正则表达式,但这就是我想出来的。
我有一个搜索数据库的输入 jQuery 自动完成。它运作良好,但我希望它对某些角色更加宽容。假设数据库中的数据是:oc-5 我需要请求的字符串 oc5 或 oc_5匹配数据库中的当前字符串。
如果数据库中的当前值为ac2,我需要a-c-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])$/, "")
。这意味着检查除特殊符号外的任何字符后跟一个特殊符号重复三次,并确保字符串的末尾前面没有特殊符号。
我不太擅长正则表达式,但这就是我想出来的。