Sanu0074

Sanu0074
Рейтинг
110
Регистрация
31.08.2012

siv1987, а как правильно в регэксп подставить эти знаки в hex формате - 3E и 3C ? может тогда заработает..

siv1987:
А если нужно точное совпадание?

тут можно проверять, если is_numeric - те не подставлять %%, а в иных случаях подставлять, я так подумал сделать...

siv1987:
Возможно символы <> кодируются по разному в разных кодировках (как вариант).

У вас какая кодировка? у меня 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;

то что выводится в браузер на картинке

png result.png

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, которая из такой строки + массив делает запрос. Не знаю как прикрутить лексемы(

проблема решена, закрывайте)

Всего: 373