|
|
|
| Помогите доделать, нашел тут на форуме регулярный код для подсветки номеров договоров
$y['docs']='Оплта по счету N СЮ 000000346 от 28.01.2015г.Без НДС.
Оплата по счету N7447-МЮ от 28.01.2015г.Без НДС.
Оплата первого взноса по дог. займа №2901/1353-СК от 29.01.2015 Общая сумма займа 3000,00 по сч. №7457-ПП от 29.01.2015 Без НДС просто номер №СЮ000000167
Погашение займа по договору № 3001/ББ-0002 от 30.01.2015 Сумма 8333-33 Без налога (НДС)';
$pattern = "|(№\d+\S*)|s";
$replacement = "<b>\${1}</b>";
$string = $y['docs'];
echo $d= preg_replace($pattern, $replacement, $string);
|
он да работает когда в номере договора есть № а у меня в документах есть и N и n слитно и раздельно, и даже блин вот так пишут NoУ/10.06/89-СК и вот так даже пишут №СЮ000000167, и код уже не срабатывает | |
|
|
|
|
|
|
|
для: dirol
(13.05.2015 в 12:26)
| | Ваш код дословно ищет и выделяет следующее: "знак №, сразу после которого идёт одна и более цифр, далее может идти любое количество непробельных символов (а может и не идти)" .
(Кстати не понимаю зачем указан модификатор s, согласно мануалу он влияет только на действие символа "."(точка), которого в данном выражении нет. Старшие товарищи поправят, если я чего-то не понимаю.)
Теперь к вашему вопросу. Добавить альтернативу N к № достаточно просто, выражение будет иметь следующий вид:
!([№|N]\d+\S*)!u
(модификатор "u" добавлен для поддержки Юникода, если у вас однобайтная кодировка типа Windows-1251, его можно опустить).
Чтобы выделялись номера договоров не только с цифрами после № или N, а со всеми непробельными символами (буквы, цифры, тире, слеши и т.д.) приводим выражение в следующий вид:
!([№|N]\S*)!u
Однако это не решает проблему договоров, где после № или N идёт пробел. Для этого добавляем в выражение опционный пробел после альтернативы № или N:
!([№|N]\s?\S*)!u
Однако это не решает проблему договоров типа N СЮ 000000346, где пробелом разделены части номера договора (которые могут быть как буквенными, так и числовыми или смешанными). Поскольку номера договоров по законодательству имеют произвольную форму (насколько я знаю), это сделать невозможно. "Интерпретатору" регулярных выражений в строке N СЮ 000000346 от 28 не объяснить где число относится к номеру договора, а где это уже просто часть даты в предложении. | |
|
|
|
|
|
|
|
для: Lawconomist
(14.05.2015 в 16:58)
| | Все это не стоит пытаться объеденить под один шаблон. Себе дороже будет.
Делая столько допущений, вы кроме добавления вариантов нумерации, добавляете и другие совпадения.
Сперва нужно заняться анализом и выбрать все типы нумерации договоров.
Затем под каждый тип составить довольно строгое выражение.
Потом просто все их объединить через |
ЗЫ. Автор, ограничивать РВ управляющим символом | - не лучшая идея. Лучше взять что-то нейтральное, например # или привычное / | |
|
|
|
|
|
|
|
для: dirol
(13.05.2015 в 12:26)
| | http://codepad.org/huqNqUcp
<?php
$y['docs']='Оплта по счету N СЮ 000000346 от 28.01.2015г.Без НДС.
Оплата по счету N7447-МЮ от 28.01.2015г.Без НДС.
Оплата первого взноса по дог. займа №2901/1353-СК от 29.01.2015 Общая сумма займа 3000,00 по сч. №7457-ПП от 29.01.2015 Без НДС просто номер №СЮ000000167
Погашение займа по договору № 3001/ББ-0002 от 30.01.2015 Сумма 8333-33 Без налога (НДС)';
$y_arr=explode('от',$y['docs']);
$y_arr_1=explode('счету',$y_arr[0]);
$num=trim($y_arr_1[1]);
$num_hl='<span style="background-color:yellow">'.$num.'</span>';
echo str_replace($num,$num_hl,$y['docs']);
?>
|
| |
|
|
|