Вот пример реализации на PHP, который обрабатывает строку согласно вашим требованиям:
<?php
// Функция для замены кириллических символов на латинские, где это необходимо
function replaceCyrillicWithLatin($str) {
$replacements = [
'А' => 'A', 'В' => 'B', 'С' => 'C', 'Е' => 'E', 'Н' => 'H',
'К' => 'K', 'М' => 'M', 'О' => 'O', 'Р' => 'P', 'Т' => 'T',
'У' => 'Y', 'Х' => 'X', 'а' => 'a', 'в' => 'b', 'с' => 'c',
'е' => 'e', 'н' => 'h', 'к' => 'k', 'м' => 'm', 'о' => 'o',
'р' => 'p', 'т' => 't', 'у' => 'y', 'х' => 'x'
];
// Заменяем только те символы, которые имеют латинские аналоги
$result = '';
for ($i = 0; $i < mb_strlen($str); $i++) {
$char = mb_substr($str, $i, 1);
$result .= $replacements[$char] ?? $char;
}
return $result;
}
// Функция для обработки строки
function processTLString($inputString) {
// Переводим всю строку в верхний регистр
$upperString = mb_strtoupper($inputString);
// Разбиваем строку на части по разделителю '-'
$parts = explode('-', $upperString);
// Обрабатываем каждую часть
$processedParts = array_map('replaceCyrillicWithLatin', $parts);
// Собираем обратно строку
$processedString = implode('-', $processedParts);
return $processedString;
}
// Пример использования
$inputString1 = 'ТЛ-СФ1-А111-005-Вн[У]-Т3-80-Н33-10-Ф-ПК1-КБн(0)-0';
$inputString2 = 'TЛ-С2-S1B1102-005-0-T1-650-НЗ1-10-UNF-0-TBп(2)-0-1';
$inputString3 = 'ТЛ-П2-А101-01-0-T1-275-H311-0-П-K2-C50-0-0';
$output1 = processTLString($inputString1);
$output2 = processTLString($inputString2);
$output3 = processTLString($inputString3);
echo "Input 1: $inputString1\n";
echo "Output 1: $output1\n\n";
echo "Input 2: $inputString2\n";
echo "Output 2: $output2\n\n";
echo "Input 3: $inputString3\n";
echo "Output 3: $output3\n\n";
// Далее можно подключиться к SQLite и выполнить поиск по каждому параметру
function queryDatabase($processedString) {
// Подключение к SQLite (пример)
$db = new SQLite3('database.db');
// Разбиваем обработанную строку на части
$parts = explode('-', $processedString);
$results = [];
// Здесь должна быть ваша логика запросов к БД для каждого параметра
// Например:
foreach ($parts as $index => $part) {
// Пропускаем первый элемент "ТЛ" (или "TL" после обработки)
if ($index === 0) continue;
// Удаляем возможные скобки и их содержимое для поиска
$cleanPart = preg_replace('/\(.*?\)/', '', $part);
// Запрос к БД (пример)
$query = "SELECT * FROM parameters WHERE code = :code";
$stmt = $db->prepare($query);
$stmt->bindValue(':code', $cleanPart);
$result = $stmt->execute();
// Обработка результата
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
$results[$index] = $row;
}
}
return $results;
}
// Пример запроса к БД
// $dbResults = queryDatabase($output1);
// print_r($dbResults);
?>Этот код:
Переводит всю строку в верхний регистр
Заменяет кириллические символы на латинские только там, где есть соответствующие аналоги (например, 'С' на 'C', но только если это кириллическая 'С')
Разбивает строку на части по разделителю '-'
Каждую часть обрабатывает отдельно
Для работы с SQLite вам нужно:
Создать базу данных с таблицами, содержащими информацию о параметрах
Реализовать логику запросов для каждого типа параметра (например, СФ1, Т3 и т.д.)
Добавить обработку специальных символов (скобки, квадратные скобки)
Вы можете выполнять эту обработку как на клиенте (перед отправкой на сервер), так и на сервере. Лучше делать это на сервере, чтобы:
Сохранить оригинальные данные от клиента
Иметь возможность улучшать логику обработки без обновления клиентского кода
Обеспечить единообразие обработки для всех клиентов