siv1987, я запускал код, если попадается знак ">" - то отрабатывает не верно. Я выше описал результат тестирования - какую строку кормил и что на выдаче получил
siv1987,siv1987, спасибо, протестил ваш вариантик, немного не так в результирующей строке:
name LIKE ? && (:id>40 && sect LIKE ?) - здесь вместо ":id>40" - должно быть просто "id>" и в массиве $param всего два элемента, а должно быть три и вторым должен быть параметр "40".
---------- Добавлено 08.01.2015 в 21:34 ----------
Пробовал такую строку исходную - :name=первая && :sect=abc - работает
но если в строке уже есть знак > и число то все работает не так
Например при такой исходной строке :name=первая && :sect>40 - результирующая выглядит так - name LIKE ? && :sect>40 и массив так:
array(1) { [0]=> string(12) "первая" }
т.е. такой же косячок что и с первоначальным вариантом.
Mad_Man, Первый раз о них слышу. Мне нужна строка такого вида: "name LIKE ? && (id> && sect LIKE ?)" - потому что я использую обёртку для PDO, которая из такой строки + массив делает запрос. Не знаю как прикрутить лексемы(
siv1987, а как правильно в регэксп подставить эти знаки в hex формате - 3E и 3C ? может тогда заработает..
А если нужно точное совпадание?
тут можно проверять, если is_numeric - те не подставлять %%, а в иных случаях подставлять, я так подумал сделать...
Возможно символы <> кодируются по разному в разных кодировках (как вариант).
У вас какая кодировка? у меня utf8
siv1987, так вот выглядит код
if(strlen($str)>=1){
if(substr($str,0,1)==":"){ //если выражение
echo $str.'<br>';
$param = array();
preg_match_all('/:([\w_]+)\s*([<>=]{1,2})\s*(["\'].*?["\']|[^\s()]+)/', $str, $out);
for($i=0; $i<count($out[0]); $i++){
$key = $out[1][$i];
$sign = $out[2][$i];
$val = $out[3][$i];
$str = str_replace($out[0][$i], $key.(($sign == '=') ? ' LIKE' : $sign).' ?', $str);
$param[] = "%".$val."%";
}
echo $str.'<br>';
console($param);
exit;
то что выводится в браузер на картинке
siv1987, и правда все работает, извеняюсь, но почемуж в моем скрипте непашет как надо( ведь все тоже на входе
siv1987, всеравно результат тот же(
---------- Добавлено 08.01.2015 в 23:19 ----------
вся соль в знаках > и <
не могу понять почему
siv1987, я запускал код, если попадается знак ">" - то отрабатывает не верно. Я выше описал результат тестирования - какую строку кормил и что на выдаче получил
siv1987,siv1987, спасибо, протестил ваш вариантик, немного не так в результирующей строке:
name LIKE ? && (:id>40 && sect LIKE ?) - здесь вместо ":id>40" - должно быть просто "id>" и в массиве $param всего два элемента, а должно быть три и вторым должен быть параметр "40".
---------- Добавлено 08.01.2015 в 21:34 ----------
Пробовал такую строку исходную - :name=первая && :sect=abc - работает
но если в строке уже есть знак > и число то все работает не так
Например при такой исходной строке :name=первая && :sect>40 - результирующая выглядит так - name LIKE ? && :sect>40 и массив так:
array(1) {т.е. такой же косячок что и с первоначальным вариантом.[0]=>
string(12) "первая"
}
loadContent перезаписывала весь блок и сбрасывала поля. я недосмотрел. поэтому добавил callback в нее и все стало работать как надо:
function(){if(sortField.length>1){ //если была сортировка по столбцу
var cls = null;
switch(sortDirect){
case 'ASC': cls = 'sort-asc'; break;
case 'DESC': cls = 'sort-desc'; break;
}
$('.col-head[data-colkey="'+sortField+'"] span').addClass(cls);
}
Mad_Man, Первый раз о них слышу. Мне нужна строка такого вида: "name LIKE ? && (id> && sect LIKE ?)" - потому что я использую обёртку для PDO, которая из такой строки + массив делает запрос. Не знаю как прикрутить лексемы(
проблема решена, закрывайте)