Foros del Web » Programando para Internet » Javascript »

crear un buscador al estilo Operador Like de SQL

Estas en el tema de crear un buscador al estilo Operador Like de SQL en el foro de Javascript en Foros del Web. hola amigos tengo un array ejm: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original var data = [ { "ID" : "1" , "titulo" : "Issue1" ...
  #1 (permalink)  
Antiguo 28/08/2010, 19:39
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Pregunta crear un buscador al estilo Operador Like de SQL

hola amigos tengo un array

ejm:
Código Javascript:
Ver original
  1. var data= [{"ID" : "1", "titulo" : "Issue1"},  
  2.                    {"ID" : "2", "titulo" : "Issue2"},  
  3.                    {"ID" : "3", "titulo" : "Issue3"}];

como podria hacer un buscador que cuando el usuario escriba en un campo me muestre
las coincidencia como uno lo usaria usando Operador Like de SQL(like "%titulo%), si uso expresiones
como podria ser, hasta el momento tengo algo asi de test.

usando jquery lo accedo y comparo asi

Código Javascript:
Ver original
  1. data2 = $.grep(data, function(n, i)
  2.             {                  
  3.                 return n.titulo.match(/^[A-S]/);
  4.             });

hasta aqui puedo encontrar aquellos titulos que empiezen con A o S pero aplicando al estilo SQL con javascript como podria ser.

gracias

espero sus comentarios
__________________
gerardo
  #2 (permalink)  
Antiguo 30/08/2010, 14:47
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: crear un buscador al estilo Operador Like de SQL

tu expresion regular realmente no dice buscar caracteres que comienzen por A o S, sino un rango desde A hasta S. de todos modos, tienes que crear una expresion regular basado en la entrada del usuario. para ello, simplemente creas una expresion con RegExp pasando como argumento el valor del usuario. para hacerlo lo mas parecido al operador LIKE no puedes utilizar anclas. adicional, quizas tambien quieras limpiar la cadena introducida por el usuario ya que todo lo que introduzca el usuario sera interpretado como una expresion regular. es decir, si por ejemplo el usuario escribe en la consulta "^hola+", puede que quiso buscar literalmente por esa cadena pero al convertirlo a expresion regular significa [i]buscar por cadena que comience por "hol" seguido por una o mas coincidencia de "a". a no ser que tu quieras darle esa funcionalidad al usuario. el codigo de limpieza te lo dejo a ti.
Código:
var consulta_usuario = "la cadena";
// la expresion de tu funcion;
new RegExp(consulta_usuario);
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 30/08/2010, 18:02
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Sonrisa Respuesta: crear un buscador al estilo Operador Like de SQL

ok gracias amigos

saludos vere que puedo hacer

gracias
__________________
gerardo
  #4 (permalink)  
Antiguo 30/08/2010, 21:08
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Sonrisa Respuesta: crear un buscador al estilo Operador Like de SQL

hola encontre una solución sobre todo empezando por remplazar los acentos, encontre
una funcion para remplazar, que fue lo que se hizo

1.-la cadena del array data, cuando lo voy recorriendo con $.grep lo convierto a minusculas
2.-remplazo los acentos
3.-compara el mach

este seria mi array original
Código Javascript:
Ver original
  1. var data= [{"ID" : "1", "titulo" : "Suspensión de vuelos de la linea Mexicana para niños, no es el fin de aerolínea: ASSA"},  
  2.    
  3.                          {"ID" : "2", "titulo" : "jQuery Métodos y Eventos Interesantes áhora línea"},  
  4.    
  5.                          {"ID" : "3", "titulo" : "Wall Street cae por suspensiones preocupación en la economía DÍA pingüino"}];

hacemos la busqueda
Código Javascript:
Ver original
  1. data2 = $.grep(data, function(n, i)
  2. {
  3.  
  4.    var cadena = n.titulo.toLowerCase();
  5.    var cadena = stripVowelAccent(cadena);
  6.    alert(cadena);//mostramos la cadena sin acentos
  7.    return cadena.match(/linea/gi);             
  8.  
  9. }

funcion que remplaza los acentos y ñ
Código Javascript:
Ver original
  1. function stripVowelAccent(str)
  2. {
  3.  var rExps=[
  4.  {re:/[\xC0-\xC6]/g, ch:'A'},
  5.  {re:/[\xE0-\xE6]/g, ch:'a'},
  6.  {re:/[\xC8-\xCB]/g, ch:'E'},
  7.  {re:/[\xE8-\xEB]/g, ch:'e'},
  8.  {re:/[\xCC-\xCF]/g, ch:'I'},
  9.  {re:/[\xEC-\xEF]/g, ch:'i'},
  10.  {re:/[\xD2-\xD6]/g, ch:'O'},
  11.  {re:/[\xF2-\xF6]/g, ch:'o'},
  12.  {re:/[\xD9-\xDC]/g, ch:'U'},
  13.  {re:/[\xF9-\xFC]/g, ch:'u'},
  14.  {re:/[\xD1]/g, ch:'N'},
  15.  {re:/[\xF1]/g, ch:'n'} ];
  16.  
  17.  for(var i=0, len=rExps.length; i<len; i++)
  18.   str=str.replace(rExps[i].re, rExps[i].ch);
  19.  
  20.  return str;
  21. }

saludos

solo me falta algo que el texto que busco debere convertirlo en minusculas y de igualmenra remplazar los acentos si los hay

saludos

espero sus comentarios
__________________
gerardo
  #5 (permalink)  
Antiguo 30/08/2010, 21:18
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
De acuerdo Respuesta: crear un buscador al estilo Operador Like de SQL

ah sorry aqui es donde obtuve el script

http://scripterlative.com/files/noaccent.htm

saludos

espero sus comentarios
__________________
gerardo
  #6 (permalink)  
Antiguo 30/08/2010, 23:42
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: crear un buscador al estilo Operador Like de SQL

me falta como crear el patron de busqueda de lo que
se escribio en un campo text

Código:
var patro = new RegExp($('#searchtx').val(), "gi");
				 				
              	var cadena = n.titulo.toLowerCase();
              	var cadena = stripVowelAccent(cadena);             	
              	return cadena.match(patro);
es correcto????, me funciona pero si me pueden confirmar si es correcto crear la expresión ya que
antes la tenia asi:

cadena.match(/linea/gi);
__________________
gerardo

Etiquetas: estilo, operador, sql, buscadores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:10.