2011-09-30 61 views
10

在MySQL中我用類似條款:什麼是MySQL的%LIKE%子句的JavaScript等價物?

LIKE %some keyword% 

對數據庫中的記錄進行搜索。我可以用什麼來類似地在JavaScript中進行搜索?因此,如果用戶輸入類似

ger 

它會顯示

german shepard 

無法使用:

str.search('ger'); 

因爲它似乎只匹配整個單詞

回答

18

它與%LIKE%不完全相同,但可以使用indexOf()

var str = "Mohsen", 
    st = "Moh"; 

if(str.indexOf(st) > -1) // true 
+1

你的脫線是落後的。 '>'不是'<' – Wiseguy

+1

genious:D ...呃我討厭min評論長度 –

+2

你抓住我!呃我討厭最小評論長度 – Mohsen

5

我我不確定你在使用類似的運算符(例如表單域)的上下文中,但你可能想要利用它javascript的正則表達式對象。

一個簡單的例子(在你的情況下,對於LIKE查詢),可能是這樣的:

var regex = /.*ger.*/ 
var matchesRegex = regex.test(yourString); 
if (matchesRegex) { 
    //do something 
} 

或者,您可以搜索使用indexOf操作您的字符串的發生:

var matches = yourString.indexOf("ger") >= 0 ? true : false; 
if (matches) { 
    //do something 
} 
+2

它可能很容易陷入困境給予一定的輸入 –

+1

使用正則表達式是不是一個好主意正則表達式。它也很慢 – Mohsen

+0

@碎片:你說得對。我不知道爲什麼這是第一個想到的解決方案。同時,正則表達式可以允許其他類似於SQL語法的東西,而您不能用'indexOf'或其他字符串操作來完成。 – NT3RP

2

search函數不僅返回整個單詞。也許你得到的事實混淆返回從零開始的索引,所以......

// this returns 0 as positive match at position 0 
"german shepherd".search('ger') 

// this returns -1 as negative match 
"german shepherd".search('gerx') 

所以,你需要做的對抗-1搜索結果的對比,看看它是否是匹配或不 - 你不能只檢查真/假。

所以,你可以做...

if(str.search('ger') !== -1){ 
    // matches string 
} else { 
    // does not match string 
} 

// or another way 
// add one to convert result to one-based index, and check truthiness 
if(str.search('ger')+1){ 
    // there is a match 
} else { 
    // there is not a match 
} 
0

假設你已經得到了作爲一個字符串數組了一系列的記錄,你可以使用JavaScript built-in Array.filter method

var ss = ['german shepard', 'labrador', 'chihuahua']; 
var matches = ss.filter(function(s) { 
    return s.match(/ger/); 
}; 
matches; // => ['german shepard'] 

或者,如果你的目標的JavaScript沒有實現該方法(例如它在第5版之前實現ECMAScript),那麼你可以做一個簡單的數組搜索,例如:

var searchArray = function(arr, regex) { 
    var matches=[], i; 
    for (i=0; i<arr.length; i++) { 
    if (arr[i].match(regex)) matches.push(arr[i]); 
    } 
    return matches; 
}; 
searchArray(ss, /h/); // => ['german shepard', 'chihuahua'] 
0

這是一個在JQuery中使用它的簡單方法。

這使用通過表格行上的數據過濾器過濾表格中的文本數據,但它可以很容易地用於其他目的。

$('#search').on('keyup', function() { 
    var val = $.trim(this.value); 
    if (val) { 
     $('tr[data-filter!=' + val + ']').hide(); 
     $('tr[data-filter^=' + val + ']').show(); 
    } else { 
     $('tr[data-filter]').show(); 
    } 
}); 

在這個例子中,將隱藏在那裏的完全匹配的沒有發現所有的錶行,然後由字符串值開始進行篩選。 trim()函數在所有空白處都是有用的,那麼它仍然會顯示一切,就好像搜索從未做過一樣。如果您希望它在字符串上的任何位置顯示搜索的輸入,請使用*而不是^。這兩個特殊字符都區分大小寫。還要確保hide命令首先顯示,並且兩者都存在,否則將無法正常工作。

這裏來看看另一個例子是利用兩個^且*字符: http://jsfiddle.net/heatwaveo8/2VKae/

相關問題