Я начинаю с небольшого набора школ, а затем хочу проверить, соответствует ли значение ввода одной из этих школ. Вот мой код до сих пор:

    var $schools = [
     'University of Tennessee-Knoxville',
     'Maryville College',
     'Cleveland State Community College',
     'East Tennessee State University'
    ];   
    var $searchBar = $('input.searchBar');
    $searchBar.keyup(function(){
         var $searchValue = $searchBar.val();
         for (var x = 0; x < $schools.length; x++) {
             var $schoolLC = $schools[x].toLowerCase();
             var $searchLC = $searchValue.toLowerCase();
             var $searchingValue = new RegExp('.*' + $searchLC + '.*');
             if ($schoolLC.match($searchingValue)) {
                 console.log($searchLC);
             }
         }
     });

Но что-то явно не так (я верю с моим RegExp), потому что он никогда не console.logs $ searchLC.

Спасибо!!

0
dezman 1 Фев 2013 в 20:07

3 ответа

Попробуйте это: Демо-версия

for (var x = 0; x < $schools.length; x++) {
    var $schoolLC = $schools[x].toLowerCase();
    var $searchLC = $searchValue.toLowerCase();
    var $searchingValue = new RegExp('.*' + $searchLC + '.*');
    if ($schoolLC.match($searchingValue)) {
        alert($schoolLC);
    }
}
1
ATOzTOA 1 Фев 2013 в 16:16

Ну, для этого конкретного примера, вместо использования соответствия вы можете использовать indexOf, чтобы ваш код стал

var $schools = [
 'University of Tennessee-Knoxville',
 'Maryville College',
 'Cleveland State Community College',
 'East Tennessee State University'
];   
var $searchBar = $('input.searchBar');
$searchBar.keyup(function(){
     var $searchValue = $searchBar.val();
     for (var x = 0; x < $schools.length; x++) {
         var $schoolLC = $schools[x].toLowerCase();
         var $searchLC = $searchValue.toLowerCase();
         if ($schoolLC.indexOf($searchLC) >= 0) {
             console.log($searchLC);
         }
     }
 });
1
muhoweb 1 Фев 2013 в 16:19

Я думаю, вам нужно экранировать все специальные символы RegEx:

function escapeRegExp(str) {
  return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}

...
var $searchingValue = new RegExp('.*' + escapeRegExp($searchLC) + '.*');
...
1
Corneliu 1 Фев 2013 в 16:10