Me gustaría poder escribir una expresión regular, por ejemplo ^.{2}06.{4,}$ en mis barras de búsqueda de columnas individuales. Como referencia, pude hacer esto cuando estaba usando la versión del lado del cliente de DataTables, pero desde que cambié al lado del servidor para manejar mi tabla más grande, no he podido replicar esto.
Aquí hay un enlace al ejemplo que he creado a partir de https://www.datatables.net/examples/api/multi_filter.html
Y aquí está mi código actual para la inicialización de la tabla.
var table = $('#results').dataTable({ processing: true, serverSide: true, ajax: 'getTable.php', orderCellsTop: true, fixedHeader: true, "search" : { //this is what I have changed from the DataTables example//* "regex": true //* }, //* createdRow: function ( row ) { //* $(row).addClass("hover"); //* }, //* //*********************************************************************** initComplete: function () { this.api() .columns() .every(function () { var that = this; $('input', this.footer()).on('keyup change clear', function () { if (that.search() != this.value){ that.search( this.value ).draw(); //I have also tried setting the optional regex value of the //search function to true with no success //that.search( this.value , true ).draw(); } }); }); } });si alguien me pudiera ayudar con esto se lo agradeceria mucho
Mire la sección Parámetros enviados de la página Procesamiento del lado del servidor en el manual oficial.
Verás dos cosas de relevancia:
search[regex]: verdadero si el filtro global debe tratarse como una expresión regular para la búsqueda avanzada; de lo contrario, falso.
Y:
columns[i][search][regex]- Indicador para indicar si el término de búsqueda para esta columna debe tratarse como una expresión regular (verdadero) o no (falso).
Por lo tanto, su controlador de ruta del lado del servidor necesita analizar los parámetros enviados en la respuesta, para extraer estos valores booleanos para cada uno de sus filtros de columna. Estos valores determinarán si el término de búsqueda de la columna debe tratarse como una expresión regular o no.
También debe usar la opción DataTables searchCols para indicar cuáles de los términos de búsqueda de sus columnas deben tratarse como expresiones regulares; no puede usar solo la opción search: { "regex": true } porque eso es solo para el campo de búsqueda global .
Un ejemplo:
searchCols: [ { regex: false }, { regex: true }, { regex: true }, { regex: true }, { regex: true }, { regex: true } ]El ejemplo anterior asume una tabla con 6 columnas, y todos sus términos de búsqueda, excepto la primera columna, deben tratarse como expresiones regulares.
Los datos se pueden encontrar en el cuerpo de la solicitud en las columns[i][search][regex] , como se indicó anteriormente.
Hay una advertencia en la documentación de las tablas de datos que vale la pena repetir:
Al igual que con la búsqueda global, normalmente los scripts de procesamiento del lado del servidor no realizarán búsquedas de expresiones regulares por razones de rendimiento en grandes conjuntos de datos, pero es técnicamente posible y a discreción de su script.
Nota final:
La lógica de búsqueda del lado del cliente (DataTables) se ignora cuando usa serverSide: true . Eso incluye la llamada a la API de search() incluida en su pregunta:
that.search( this.value ).draw();Ese es uno de los puntos fundamentales sobre el uso del procesamiento del lado del servidor para su DataTable: toda la lógica para la paginación, clasificación y filtrado se maneja en el servidor , y DataTables no proporciona nada de eso. Tienes que proporcionar toda esa lógica tú mismo.