2011-09-30 31 views
10

Trong MySQL tôi sử dụng mệnh đề như:JavaScript tương đương với mệnh đề% LIKE% của MySQL là gì?

LIKE %some keyword% 

để thực hiện tìm kiếm trên các hồ sơ cơ sở dữ liệu. Tôi có thể sử dụng những gì tương tự để thực hiện tìm kiếm trong JavaScript? Vì vậy, nếu người dùng nhập cái gì đó như

ger 

nó sẽ hiển thị

german shepard 

có thể không sử dụng:

str.search('ger'); 

vì nó dường như chỉ phù hợp với toàn bộ từ

Trả lời

18

không chính xác giống như %LIKE% nhưng bạn có thể sử dụng indexOf().

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

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

Dấu sót của bạn bị lạc hậu. '>' not '<' – Wiseguy

+1

genious: D ... ugh i ghét min comment length –

+2

Bạn bắt được tôi! ugh i ghét min comment length – Mohsen

5

tôi m không chắc chắn chính xác trong bối cảnh bạn đang sử dụng toán tử tương tự (ví dụ: trường biểu mẫu), nhưng bạn có thể muốn tận dụng lợi thế đối tượng biểu thức chính quy của javascript.

Một ví dụ đơn giản (trong trường hợp của bạn, cho một truy vấn LIKE), có thể trông như thế này:

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

Ngoài ra, bạn có thể tìm kiếm tỷ lệ của chuỗi của bạn bằng cách sử dụng indexOf hoạt động:

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

nó có thể dễ dàng gặp rắc rối với regex cho đầu vào nhất định –

+1

Sử dụng regex không phải là một ý tưởng tốt. Nó cũng chậm quá – Mohsen

+0

@Shredder: Bạn nói đúng. Tôi không biết tại sao nó là giải pháp đầu tiên xuất hiện trong tâm trí tôi. Đồng thời một regex có thể cho phép những thứ khác tương tự như cú pháp SQL mà bạn không thể làm với 'indexOf' hoặc các hoạt động chuỗi khác. – NT3RP

2

search chức năng không chỉ trả lại toàn bộ từ. Có thể bạn đang bối rối bởi thực tế nó trả về chỉ số không dựa trên, do đó ...

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

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

Vì vậy, bạn cần so sánh kết quả tìm kiếm với -1 để xem nó có phù hợp hay không - bạn không chỉ có thể kiểm tra đúng/sai.

Vì vậy, bạn có thể làm ...

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

Giả sử bạn đã có một loạt các hồ sơ như một mảng của chuỗi bạn có thể sử dụng 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'] 

Hoặc nếu mục tiêu của bạn JavaScript không triển khai phương thức đó (ví dụ: nó triển khai ECMAScript trước phiên bản thứ 5), sau đó bạn có thể thực hiện tìm kiếm mảng đơn giản, ví dụ:

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

Đây là một cách dễ dàng để thực hiện điều đó trong JQuery.

Điều này sử dụng lọc dữ liệu văn bản bên trong bảng thông qua bộ lọc dữ liệu trên hàng của bảng, nhưng có thể dễ dàng sử dụng cho các mục đích khác.

$('#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(); 
    } 
}); 

Trong ví dụ này, nó sẽ ẩn tất cả các hàng trong bảng không tìm thấy kết quả khớp chính xác, sau đó lọc theo giá trị chuỗi bắt đầu. Hàm trim() rất hữu ích trong trường hợp tất cả các không gian trống, sau đó nó sẽ vẫn hiển thị mọi thứ như thể một tìm kiếm chưa bao giờ được thực hiện. Nếu bạn muốn nó hiển thị đầu vào được tìm kiếm ở đâu đó trên chuỗi, hãy sử dụng dấu * thay vì dấu ^. Cả hai ký tự đặc biệt đều phân biệt chữ hoa chữ thường. Ngoài ra hãy chắc chắn rằng lệnh ẩn hiển thị đầu tiên và cả hai đều có mặt, hoặc nó sẽ không hoạt động đúng cách.

Xem ví dụ khác ở đây là sử dụng cả^và * nhân vật: http://jsfiddle.net/heatwaveo8/2VKae/

Các vấn đề liên quan