2016-02-18 2 views
2

В моей стране есть что-то вроде «Рут», это как идентификационный номер для каждого человека. Формат номера Rut - «12.345.678-K» (K также может быть числом).
Итак, я создал форму поиска ajax в реальном времени, чтобы показывать людей из моей базы данных в таблице, а когда люди набирают 12345678k, она превращается в 12.345.678-k и выполняет поиск этого Rut в базе данных ($ q - это поисковое слово).Выделите несколько слов поиска в строке

SELECT * FROM clients WHERE rut LIKE '%$ruts%' OR rut LIKE '%$ruts2%' OR rut LIKE '%$q%' 


Формат:

//Rut format 
if(strlen($q)==3){ 
    // 123 -> 12.3 
    $ruts = substr_replace($q, '.', 2, -1); 
}elseif(strlen($q)==4){ 
    // 1234 -> 12.34 
    $ruts = substr_replace($q, '.', 2, -2); 
}elseif(strlen($q)==5){ 
    // 12345 -> 12.345 
    $ruts = substr_replace($q, '.', 2, -3); 
}elseif(strlen($q)==6){ 
    // 123456 -> 12.3456 
    // 12.3456 -> 12.345.6 
    $ruta = substr_replace($q, '.', 2, -4); 
    $ruts = substr_replace($ruta, '.', 6, -1); 
}elseif(strlen($q)==7){ 
    // 1234567 -> 12.34567 
    // 12.34567 -> 12.345.67 
    $ruta = substr_replace($q, '.', 2, -5); 
    $ruts = substr_replace($ruta, '.', 6, -2); 
}elseif(strlen($q)==8){ 
    // 12345678 -> 12.345.678 
    // 12.345678 -> 12.345.678 
    $ruta = substr_replace($q, '.', 2, -6); 
    $ruts = substr_replace($ruta, '.', 6, -3); 
}elseif(strlen($q)==9){ 
    // 12345678k -> 12.345678k 
    // 12.345678k -> 12.345.678k 
    // 12.345.678k -> 12.345.678-k 
    $ruta = substr_replace($q, '.', 2, -7); 
    $rutb = substr_replace($ruta, '.', 6, -4); 
    $ruts = substr_replace($rutb, '-', 10, -1); 
}else{ 
    $ruts = $q; 
} 


Я также сделал str_replace(), чтобы выделить результаты в то время как я печатаю.

$highlightrut = str_replace("$ruts", "<span style='color:red'>$ruts</span>", $output['rut']); 

Проблема заключается в том, что существует еще один Diferent формат гона (1.234.567-K), и я уже сделал преобразование формата

//Rut format 2 (1.234.567-K) 
if(strlen($q)==2){ 
    // 12 -> 1.2 
    $ruts2 = substr_replace($q, '.', 1, -1); 
}elseif(strlen($q)==3){ 
    // 123 -> 1.23 
    $ruts2 = substr_replace($q, '.', 1, -2); 
}elseif(strlen($q)==4){ 
    // 1234 -> 1.234 
    $ruts2 = substr_replace($q, '.', 1, -3); 
}elseif(strlen($q)==5){ 
    // 12345 -> 1.2345 
    // 1.2345 -> 1.234.5 
    $ruta2 = substr_replace($q, '.', 1, -4); 
    $ruts2 = substr_replace($ruta2, '.', 5, -1); 
}elseif(strlen($q)==6){ 
    // 123456 -> 1.23456 
    // 1.23456 -> 1.234.56 
    $ruta2 = substr_replace($q, '.', 1, -5); 
    $ruts2 = substr_replace($ruta2, '.', 5, -2); 
}elseif(strlen($q)==7){ 
    // 1234567 -> 1.234567 
    // 1.234567 -> 1.234.567 
    $ruta2 = substr_replace($q, '.', 1, -6); 
    $ruts2 = substr_replace($ruta2, '.', 5, -3); 
}elseif(strlen($q)==8){ 
    // 1234567k -> 1.234567k 
    // 1.234567k -> 1.234.567k 
    // 1.234.567k -> 1.234.567-k 
    $ruta2 = substr_replace($q, '.', 1, -7); 
    $rutb2 = substr_replace($ruta2, '.', 5, -4); 
    $ruts2 = substr_replace($rutb2, '-', 9, -1); 
}else{ 
    $ruts2 = $q; 
} 

Но я не знаю, как выделить приводит к той же строке.

+0

Что именно вы имеете в виду, выделив результаты в той же строке? У вас есть '$ rut2' и' $ rut'? Используйте флаг, указывающий, какой формат соответствует, и соответственно установите $ highlightrut. Por cierto, extrano a Chile po! :) – eol

+0

Прошу прощения, я имею в виду в той же камере. Результаты запроса отображаются в таблице, а результат Rut sesult показан в ячейке. Итак, когда я ищу «1256», он действительно ищет «12.56», поэтому, если колея «12.563.589-K», то выделится («12.56»). Я хочу сделать то же самое с другим форматом rut. Также, как использовать флаг? Салудос отделил Чили! – Juanky

+2

Не было бы проще хранить все номера Rut в формате 12345678k в вашей базе данных? – simon

ответ

0

Я решил это, спасибо всем за вашу поддержку.
Вот код:

if(preg_match('~('.$ruts.')~', $output['rut'])) { 
     $highlightrut = str_replace("$ruts", "<span style='color:red'>$ruts</span>", $output['rut']); 
    }elseif(preg_match('~('.$ruts2.')~', $output['rut'])) { 
     $highlightrut =str_replace("$ruts2", "<span style='color:red'>$ruts2</span>", $output['rut']); 
    } 
0

Вы можете str_replace во второй раз, но теперь на $ highlightrut вар. Вы будете иметь обе основные моменты на струне

$highlightrut = str_replace("$ruts", "<span style='color:red'>$ruts</span>", $output['rut']); 
$highlightrut = str_replace("$ruts2", "<span style='color:red'>$ruts2</span>", $highlightrut); 

Или

$highlightrut = str_replace(array("$ruts","$ruts2"), array("<span style='color:red'>$ruts</span>","<span style='color:red'>$ruts2</span>"), $output['rut']); 
+0

Но если я ищу «50» и Rut number «5.050.658- K "он выделит четыре числа в начале, правильно? – Juanky

+0

Да, если ваш поиск не учитывает точки, они будут –

+0

В этом проблема, я не могу разглядеть точки еще – Juanky

Смежные вопросы