Привет форумчане
Есть страница со списком номеров и фильтром. Фильтр чувствителен ко всем символам, а номера оформлены со скобками и тире, причем все по-разному (пример 8-928-123-12-12 и 8-(928)-(1)-(3455) и тд)
Пользователю неудобно будет вводить тире и скобки, а без них фильтр скрывает нужные номера
Вот мне и нужно регулярное выражение, которое не будет учитывать некоторые символы(тире и скобки), чтобы пользователь вводил всего лишь 8928
Возможно есть и другие пути решения моей проблемы, так что я очень надеюсь на вашу помощь
UPD
Подолбавшись получилась такая тема
<script>
var filterstr = "444332362";
var num = "\\)?\\-?\\(?" + filterstr.substring(0,3) + "?\\)?\\-?\\(?" + filterstr.substring(3,4) + "?\\)?\\-?\\(?" + filterstr.substring(4,5) + "?\\)?\\-?\\(?" +filterstr.substring(5,6)+ "?\\)?\\-?\\(?" +filterstr.substring(6,7)+ "?\\)?\\-?\\(?" +filterstr.substring(7,8)+ "?\\)?\\-?\\(?" +filterstr.substring(8,9)+ "?\\)?\\-?\\(?";
alert("444332".match(RegExp(num)));
alert("444332".indexof(RegExp(num)));
</script>
Матч выводит все правильно, а вот индексоф тупит и хром выдает ошибку Uncaught TypeError: undefined is not a function
Заранее благодарен
Если нужно, то вот сам скрипт поиска
/**
* fastLiveFilter jQuery plugin 1.0.3
*
* Copyright (c) 2011, Anthony Bush
* License: <http://www.opensource.org/licenses/bsd-license.php>
* Project Website: [url]http://anthonybush.com/projects/jquery_fast_live_filter/[/url]
**/
jQuery.fn.fastLiveFilter = function(list, options) {
// Options: input, list, timeout, callback
options = options || {};
list = jQuery(list);
var input = this;
var lastFilter = '';
var timeout = options.timeout || 0;
var callback = options.callback || function() {};
var keyTimeout;
// NOTE: because we cache lis & len here, users would need to re-init the plugin
// if they modify the list in the DOM later. This doesn't give us that much speed
// boost, so perhaps it's not worth putting it here.
var lis = list.children();
var len = lis.length;
var oldDisplay = len > 0 ? lis[0].style.display : "block";
callback(len); // do a one-time callback on initialization to make sure everything's in sync
input.change(function() {
// var startTime = new Date().getTime();
var filter = input.val().toLowerCase();
var li, innerHTML, old;
var numShown = 0;
for (var i = 0; i < len; i++) {
li = lis[i];
innerHTML = !options.selector ?
(li.textContent || li.innerHTML || "") :
$(li).find(options.selector).text();
li.textContent = li.textContent.replace("<span style='background-color: #E66A57'>","");
li.textContent = li.textContent.replace("</span>","");
if (innerHTML.toLowerCase().replace(/-|\(|\)/g,'').indexOf(filter) >= 0) {
$(li).html(function(i,o) {
return o.replace(filter, "<span style='background-color: #E66A57'>" + filter + "</span>");
});
if (li.style.display == "none") {
li.style.display = oldDisplay;
}
numShown++;
} else {
if (li.style.display != "none") {
li.style.display = "none";
}
}
}
callback(numShown);
// var endTime = new Date().getTime();
// console.log('Search for ' + filter + ' took: ' + (endTime - startTime) + ' (' + numShown + ' results)');
return false;
}).keydown(function() {
clearTimeout(keyTimeout);
keyTimeout = setTimeout(function() {
if( input.val() === lastFilter ) return;
lastFilter = input.val();
input.change();
}, timeout);
});
return this; // maintain jQuery chainability
}