2011-09-30 66 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/

相关问题