Имя: Пароль:
1C
1С v8
Регулярные выражения в 1С
,
0 Stim213
 
24.11.11
00:10
Кто-нить знает, в последнем релизе платформы появилась поддержка сабжа? Планируется ли вообще?
129 GenV
 
24.11.11
11:46
(122) Ты ж агитатор.
(119) ??
130 smaharbA
 
24.11.11
11:48
(129) промазал я
131 Поручик
 
24.11.11
11:49
(128) Угу. Как Windows или Unix, которые сами по себе являются набором программ, которые служат для запуска и экплуатации других программ, которые ... И всё заверте....
132 Alexandr Puzakov
 
24.11.11
11:52
Связывая платформу с конфигурацией мы получаем учетную систему! Не инженерную систему, не систему управления кораблем, не систему для сложных вычислений...

Так вот если появилась потребность в создании инженерной или еще какой системы, то стоит остановиться и подумать, а правильно ли я поступаю, ИСПОЛЬЗУЯ 1С:ПРЕДПРИЯТИЕ?
133 badboychik
 
24.11.11
11:54
Alexandr Puzakov, открою БАААЛЬШОЙ секрет - на 1С написаны не только торговля и бухгалтерия. Зайди на сайт v8.1c.ru , посмотри отраслевые решения. Там и логистика и таксомоторный парк есть, с интеграцией GoogleMaps прям окне 1С

>>>Через месяц какой-нибудь чудик захочет заниматься обработкой графики и захочет скрестить 1С с графическим редактором

Хаха :) так это уже реализовано )) С помощью .NET-Bridge - есть конфигурация для оконных компаний где окна рисуются с помощью GDI+ на форме в 1С
134 Stim213
 
24.11.11
11:55
(132) чувак, ты не прав. Регулярные выражения - это задача, которая встречается везде - и в учетных системах и в инженерных
135 rs_trade
 
24.11.11
11:57
(132) то есть используя в разработке внешние технологии (кстати интеграцию с которыми платформа поддерживает штатно), моя нетленка превращается из учетной системы в инженерную?
136 Лефмихалыч
 
24.11.11
11:59
(124) у тебя есть нож для бумаги, как с его помощью резать мясо?
ответ: ни как, но из этого не следует, что твой нож не является ножом
137 Alexandr Puzakov
 
24.11.11
11:59
(134) у меня почему-то не встречается. Как только возникает потребность в каком-либо кривогорожении я останавливаюсь и задумываюсь, так вот оказывается, что в большинстве случаев эти извращения просто-напросто лишние и можно прекрасно обойтись без них.
138 Поручик
 
24.11.11
11:59
(134) Напиши пожелание по поводу регулярок девелоперам 1С. Прикольно будет, если в ответ на просьбу обосновать, ты сможешь выдать только нечленораздельное, а штоб було.
139 Лефмихалыч
 
24.11.11
12:01
(127) кстати, если так рассуждать, то учетных систем в природе не существует
140 Alexandr Puzakov
 
24.11.11
12:02
(133) опыт использования этих поделок есть?
141 Лефмихалыч
 
24.11.11
12:03
(137) это просто означает, что со сложными задачами ты не сталкивался ни когда
142 badboychik
 
24.11.11
12:03
(138) откажут, даж не потому что не надо, а потому что их итак легко использовать. В чем особая разница между

РВ = Новый РегулярноеВыражение();
и
РВ = Новый COMОбъект("VBScript.RegExp");
143 Alexandr Puzakov
 
24.11.11
12:05
(141) опишите задачу, которая в Вашем понимании сложная.
144 sergeante
 
24.11.11
12:06
 


!С - это инструмент, РегЭкспр - это инструмент, СКЛСервер - инструмент, подключаемая Чтототам.dll - инструмент, ...

Объединяя инструменты мы делаем конечный продукт. Не упирайся рогом, не ограничивай себя из принципа одним только молотком, чтобы сделать стул может понадобиться ещё и стамеска с отвёрткой.




 
145 badboychik
 
24.11.11
12:07
(140)просвещайся http://infostart.ru/public/70859/ , http://atechnology.ru/
"Архитектура Elisy .Net Bridge оказалась на практике достаточно хорошей. Она позволяет подключать к 1С зарубежные .Net-компоненты, разработчики которых скорее всего даже не слышали о существовании 1С:Предприятие. "

"В конечном счете, выигрывает только пользователь, которому не нужно переключаться из одного приложения в другое, как это могло быть в традиционном исполнении до интеграции 1С+.Нет. Система упрощена за счет отсутствия механизмов импорта/экспорта в/из 1С, которые предполагаются в случае 2х отдельных приложений."
146 smaharbA
 
24.11.11
12:09
почему создатели ос и прочих утилит не остановились когда решили найти вхождение в текст ?
147 Alexandr Puzakov
 
24.11.11
12:11
(144) я не призываю отказываться напрочь от скрещивания 1С с чем-то там, если Вам хочется, то всегда пожалуйста. Но 90 процентов УЧЕТНЫХ задач совершенно не требуют никаких извращений, и распрекрасно реализуются средствами платформы. Я стараюсь придерживаться этих 90%...
148 rs_trade
 
24.11.11
12:12
(143) Не то что бы сложная задача. Но тем не менее. На этой неделе пришлось делать.

Есть база контрагентов с не структурироваными адресами. Необходимо для всех адресов получить почтовые индексы и район г.Москвы.

Вперед.
149 Alexandr Puzakov
 
24.11.11
12:15
(148) чего вперед-то? Базу показывай. Или хочешь чтобы я у пациента вслепую резал? Не, это не мой метод.
150 VVi3ard
 
24.11.11
12:16
(142) В том что VBScript.RegExp в системе может просто не быть :) С чем неоднократно сталкивался в своей работе.
151 sergeante
 
24.11.11
12:16
(147) когда-нибудь ты таки упрёшься в эти оставшиеся 10%
152 badboychik
 
24.11.11
12:18
(150) как так? оно же в винде вшито
153 sergeante
 
24.11.11
12:18
(150) ни разу не сталкивался
154 Alexandr Puzakov
 
24.11.11
12:19
(151) может и упрусь. Но надеюсь не придется.
155 sergeante
 
24.11.11
12:19
(148) ну приведи ему пяток строчек, пусть алгоритм разбора сваяет
156 rs_trade
 
24.11.11
12:20
(149) вот тебе база адресов

Москва, Карамышевский (проезд), 6
Москва, Большая Марфинская, 1, корпус 2
Раменский р-н, д.Вялки, Напольный проезд, 6
Москва, Lobachevskogo, 100
Москва, Ак Варги, 28
157 Поручик
 
24.11.11
12:20
(142) Разница немного есть.

Недостатки библиотеки VBScript RegExp:
1. является платформозависимой;
2. требуется наличие библиотеки VBScript (vbscript.dll) версии 5.0 и выше на клиентском компьютере (поставляется в составе Windows версии 98 и выше);
3. объект RegExp разбивается на другие объекты (MatchCollection, SubMatches), которые нужно обрабатывать в отдельных циклах;
4. не поддерживается Lookbehind утверждение (assertion);
5. при ошибке в выражении (Pattern) возникает не информативное исключение с текстом ошибки "OLE Error 800A1399".

Пруф: http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1062
158 rs_trade
 
24.11.11
12:21
(156) У этих адресов надо проставить почтовый индекс и район Москвы. Как будешь делать?
159 Alexandr Puzakov
 
24.11.11
12:27
(158) размеры базы какие? Сколько адресов?
160 rs_trade
 
24.11.11
12:28
(159) 10 тысяч
161 smaharbA
 
24.11.11
12:29
для работы любой учетной системы ненужны окна и кнопки, вполне достаточно консоли
162 Alexandr Puzakov
 
24.11.11
12:31
(160) в виде текста хранится информация?
163 badboychik
 
24.11.11
12:32
(157) второй пункт сложно назвать "требованием", это часть любой винды сейчас
платформозависимость - если знаешь что у тебя сервер на линухе, можно юзать например вызов grep,awk,sed,perl и т.д. что больше нравится

В любом случае, хорошо если регэкспы появились бы в 1С 9.0 :)
164 VVi3ard
 
24.11.11
12:32
(152) Сервер может быть и не на винде, а клиент тонкий.
В 2000 серверном нет этого компонента, ставится отдельно: WindowsXP-Windows2000-Script56-KB917344-x86-enu.exe
165 smaharbA
 
24.11.11
12:34
(164) эта компонента ставится отдельно только в вин 98
166 smaharbA
 
24.11.11
12:35
+ да и то не всегда
в 2000 был не 5.6
167 badboychik
 
24.11.11
12:35
(164) Ну мягко говоря Win2000 слегка устарел ))
А на чем крутится сервер - можно проверку сделать.
168 VVi3ard
 
24.11.11
12:41
(163) Или просто добавить нормальную поддержку технологии на уровне платформы.
т.е. вариантов море, можно свой ВК скомпилировать и как dll подгружать. Вопрос не втом почему нельзя в 1С использовтать RegExp, если нужно то можно использовать. Вопрос в том чтобы добавить поддержку на уровне платформы без костылей, внешних компонент, чтобы я мог в конфигураторе для поля ввода использовать выражение и.т.п. Т.е. просто нормальной спокойной работы, это в меру трудоемко, это нужно, это технологично.

(167) Однако все на нем жужжит и вертится и по сей день. У меня с заказчиками есть негласное соглашение, без их предложений я не лезу в их дела они не лезут в мои. Если у него установлен 2000 сервер значит на то есть причины.

Вообще одумайтесь о чем спор идет, на предложение включить гибкий и мощный механизм оппоненты ТС дают советы какие костыли можно применить и как обходить ошибки связанные с костылями. И я и ТС мы прекрасно знаем как обходить проблемы и какие костыли использовать. Но мне как разработчику хотелось бы чтобы гибкий и мощный механизм был частью системы.
169 rs_trade
 
24.11.11
12:42
(162) Да. В реквизите с типом строка.
170 sergeante
 
24.11.11
12:51
(168) я в общем-то, "за". За интеграцию механизма регулярок в платформу, почему нет? Но тут срач пошёл по поводу Использовать регэкспы или не использовать. Чесно говоря я не понимаю бараньей упёртости господина Alexandr Puzakov против этого. Тогда уж вопще давайте откажемся от внешних компанент, и останемся в голой 1С на едине с самим собой.
171 Хранимая Процедура
 
24.11.11
12:51
>Повторяю еще раз: 1С для учетных систем.

т.е. это как отпущение грехов, в т. ч. и отсутвие нормальных массивов

Зы. Visual Basic и VBA тоже для экономических задач придуманы. Но там это все есть
172 rs_trade
 
24.11.11
12:53
(170) А мы сейчас посмотрим как господин Alexandr Puzakov  решит задачу из (148) только средствами 1С.
173 Хранимая Процедура
 
24.11.11
12:53
для обработки больших массивов текстов таки есть смысл написать на чем-то получше 1С
174 sergeante
 
24.11.11
12:54
(172) да тут
в самом первом приблизительном варианте
регулярка в нежадном режиме

.+(.+),(.+)$

match 1 - Улица
match 2 - Дом
175 rs_trade
 
24.11.11
12:55
(174) здесь дело не в регулярках. а в использовании внешних технологий как таковых.
176 sergeante
 
24.11.11
12:55
(174) это уже даёт чтото, Разумеется без прыжков и ужимок не обойтись, но дорабатывать регулярку куда как проще чем городить циклы с поиском по подстроке
177 sergeante
 
24.11.11
12:56
(175) согласен, спор об этом и идет
178 Alexandr Puzakov
 
24.11.11
12:59
(169) в поле представления в регистре адресов лежит?
179 rs_trade
 
24.11.11
13:01
(178) да. к чему эти вопросы все? не принципиально где храниться строка. индекс с районом как получать будешь?
180 Хранимая Процедура
 
24.11.11
13:14
для парсинга адресов есть готовые решения. В свое время нагугливал беспалтные решения на Python и Java и платные ActiveX и сервисы (http://address-parser.com/index.php?page=address_parser_technology)
181 Alexandr Puzakov
 
24.11.11
13:14
(179) как это не принципиально? Вот мы худо-бедно выяснили, что это дело лежит в типовой. А там уже есть готовые функции разбора строки в массив подстрок, и готовые процедуры для работы с адресным классификатором... И это даже не вспоминая о том, что на инфостарте волялась обработка народного умельца, разбирающая представление адреса в нормальный адрес ;) И где же тут та самая критическая необходимость использования сторонней технологии?
182 sergeante
 
24.11.11
13:17
(181) Нет никакой необходимости! Ещё раз, пользуйся чем хочешь.
183 Stim213
 
24.11.11
13:17
(181)  а если это будут не адреса, а штрихкод Code128, в котором задан вес товара, например?
184 Хранимая Процедура
 
24.11.11
13:18
еще эту задачу решал разработчик http://www.gisgraphy.com/ но у него не хватило денег и тестовых данных для России. библиотеку Java он почему то в Opensource не захотел выкинуть.

http://addressparser.appspot.com/webaddressparser?address=...&country=ru

Зы. Задача на самом деле сложная и муторная
185 rs_trade
 
24.11.11
13:22
(181) адрес может быть таким

26-ти Бакинских Комиссаров
26 Бакинских Комиссаров

ул. Ак Павлова
ул. академика павлова
Akademika Pavlova

И еще куча вариантов.

Много ты в КЛАДРЕ соответствий найдешь?
186 rs_trade
 
24.11.11
13:23
+(185) да, и в кладре нет районов. так что решение в (181) не годится.
187 sergeante
 
24.11.11
13:27
(186) как нет? есть.
188 rs_trade
 
24.11.11
13:29
(187) административных округов Москвы.
189 sergeante
 
24.11.11
13:30
(188) а.
190 rs_trade
 
24.11.11
13:39
(181) могу тебе сразу сказать что по кладру ты не только район не получшь, но и индексы определишь менее чем для 20% адресов.

В то время как специалист не гнушающийся использовать внешнии технологии выполнит это задачу с результатами свыше 90%.


так что двойка тебе за решение с использованием кладра.
191 kosmit
 
24.11.11
13:52
(190) Кажись больше вариантов не последует )
192 Alexandr Puzakov
 
24.11.11
13:59
(185) полнотекстовый поиск меня спасет ;)
193 Alexandr Puzakov
 
24.11.11
14:01
(190) поперли усложнения уже... Так не годится!
194 rs_trade
 
24.11.11
14:05
(193) Годиться. Усложнения не с потолка взяты, а с реальной задачи. Кстати к (185) надо еще добавить синтаксические ошибки в адресе.
195 Alexandr Puzakov
 
24.11.11
14:16
(194) я более чем уверен, при решении этой самой реальной задачи Вы располагали гораздо большим объемом информации и затратили не один час времени... Так что двойка мне ужасно преждевременна.
196 Alexandr Puzakov
 
24.11.11
14:17
+ в полнотекстовом поиске настаивается точность поиска...
197 rs_trade
 
24.11.11
14:27
(195) Не час, за день сделал. Через Гугл карты. Полнотекстовой поиск для решения данной задачи и рядом не валялся с геосервисами гугла.
198 sergeante
 
24.11.11
14:34
(197) зачёт.
199 Alexandr Puzakov
 
24.11.11
15:04
(197) маладес! Медальку уже дали?
200 rs_trade
 
24.11.11
15:21
(199) То есть по существу возразить нечего, я так понимаю. Оно и понятно. В данном примере пытаться решить задачу только методами 1С на порядок сложнее.
201 VVi3ard
 
24.11.11
15:23
(197) У меня тоже была мысль применить геотеги, только яндекса, у них отличный геотагер, кстати как то была похожая задача, отобразить на карте не пойми какие адреса: http://infostart.ru/public/98156/ вот может пригодится кому :)
202 VVi3ard
 
24.11.11
15:24
Так на чем остановились FTS и RegEXP враги на всю жизнь или гармонично дополняющие друг друга технологии?
203 rs_trade
 
24.11.11
15:31
(201) Яндекс административный округ Москвы по адресу не говорит. А Гугл знает.
204 Поручик
 
24.11.11
15:35
(202) Второй вариант, ибо технологии разные, имеющие своё назначение.
205 orefkov
 
24.11.11
16:05
Самый прикол в том, что 1С использует "унутре", в платформе, ICU - библиотеку от IBM для работы с юникодом, ресурсами и т.п.
Так работа с регэкспами - это неотъемлемая часть ICU. Все что нужно сделать 1С - это написать пару объектов-оберток для работы из 1С-script с тем, что ужу есть внутри. То есть это такой суслик, которого не видно, а он есть.
206 VVi3ard
 
24.11.11
16:12
(205) О тяжелая Артиллерия подошла :) Приветствую.
207 orefkov
 
24.11.11
16:13
А так 1С права, что их не добавляет.
При диагнозе "1С головного мозга" попытка знакомства с регэкспами приведет к летальному исходу, у пациента мозг порвется.
208 VVi3ard
 
24.11.11
16:20
(207) если в дебри не лезть то не очень сложно, в дебри я сам не хочу лезть оттуда на меня смотрит бездна :)
209 sergeante
 
24.11.11
18:03
(207) п л я, по мойму самый грамотный комент ветки!
210 oleg_km
 
24.11.11
18:04
(208) А может географическую схему выкинуть, а добавить регулярные выражения? У некоторых товарищей действительно какое-то слепое поклонение перед 1С. Такое ощущение, что им мучительно больно признать, что 1С имеет какие-либо недостатки. Что в этом такого, нет регулярок, плохо это, вставят в 8.3 - прекрасно, не вставят, прикрутим костыли.
211 Fragster
 
гуру
24.11.11
18:10
мне вот не хватает операций DELETE и INSERT для временных таблиц, а регулярки уже давно прикручены проволокой...
212 sergeante
 
24.11.11
18:17
Да 1C, как и любая среда, постепенно со всех сторон становится обвешана разными рюшечками, примочками и припарочками. И это правильно, ящетаю. Плоха та вещь, которую нельзя допилить напильником.
213 orefkov
 
24.11.11
18:26
(212)
Вот у меня так и чешутся руки пропиариться насчет припарочек, но нет, не буду...
214 Mikeware
 
24.11.11
18:32
(207) "1с головного мозга" - это еще пол-беды... вот когда "абракадабра головного мозга", да еще год рождения -1986, то тут "ПолныйПэ"©...
215 rs_trade
 
24.11.11
18:50
(211) по моему всем не хватает функциональности языка запросов.
216 IamAlexy
 
24.11.11
18:57
а мне  в 8ке нехватает двухх вещей:

1. чтобы при выводе сообщения пользователю эта злоипучая панель "справа" от управляемой формы не вылазила с дублем сообщения
2. чтобы при отключении панели действий  не надо было в MDI режиме каждый раз дергать выосту окна и чтобы она сама всегда была максимальной.

больше проблем в 8ке нет...
217 Alexandr Puzakov
 
24.11.11
18:58
(214) флаг те в руки. Дурак присторелый.
218 oleg_km
 
24.11.11
19:23
(216) В данном случае говорили не о проблемах, а об недостающих возможностях.
219 Stim213
 
29.11.11
22:20
Вот задачка специально для Пузакова, который не верит в необходимость регулярных выражений в 1С:

Нужно перенести наименования номенклатуры в РС НаименованияНоменклатурыНаИностранныхЯзыках. Если наименование задано на русском языке - то язык(измерение РС) должен быть русский. Если на англ - соотв англ
С регулярными выражениями это заняло бы одну строку. Через стандартные средства 1С придется городить циклы, условия и пр пр..
220 Поручик
 
29.11.11
23:58
(205) Они, скорее всего, сами боятся это делать, так как реализация этих самых объектов-обёрток будет у.бищной, как смертный грех.
221 IamAlexy
 
30.11.11
00:00
кстати да.. нельзя допускать регекспы в 1С

прикиньте начнут в нетленках писать проверку заполнения адресов электронной почты через регекспы:

(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
\t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
\t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)
222 IamAlexy
 
30.11.11
00:01
пля

тут правильно: http://ex-parrot.com/~pdw/Mail-RFC822-Address.html
223 Поручик
 
30.11.11
00:07
(221) Испугал ежа голой задницей. Автор этих строк и не такое видел и писал на perl'e.
Вот как изящно проверяется корректность адреса емайл средствами 1С

// Функция проверяет что введенная строка с e-mail адресами введена правильно
//
// Формат строки:
// Z = ИмяПользователя|[Имя Пользователя] [<]пользователь@почтовый_сервер[>], Строка = Z[<разделитель*>Z]..
//
//   прим.: разделитель* - имеется в виду любой разделитель адресов
//
// Параметры:
// СтрокаПереданныхАдресов - строка - правильная строка с почтовыми адресами
//
// Возвращаемое значение:
// Структура
// ключ Статус - булево - успех или неуспех преобразования
// в случае успеха содержит ключ Значение:
//           Массив структур, где
//                  Адрес- e-mail получателя
//                  Представление   - имя получателя
// в случае неуспеха содержит ключ СообщениеОбОшибке - строка
//
//  ВАЖНО: Функция возвращает массив структур, в которых одно поле (любое)
//         может быть незаполнено. Может использоваться различными
//         подсистемами для собственного сопоставления имени пользователя
//         некому e-mail адресу. Поэтому, необходимо перед непосредственной
//         отправкой проверить, что поле почтового адреса заполнено.
//
Функция РазобратьСтрокуСПочтовымиАдресами(знач СтрокаПереданныхАдресов) Экспорт
   
   Результат = Новый Массив;
   
   НедопустимыеСимволы = "!#$%^&*()+`~|\/=";
   
   СообщениеНедопустимыеСимволы = НСтр("ru = 'Недопустимый символ %1 в адресе электронной почты %2'");
   СообщениеНеверныйФорматПочтовогоАдреса = НСтр("ru = 'Некорректный адрес электронной почты %1'");
   
   МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаПереданныхАдресов,";");
   МассивПодстрокКОбработке = Новый Массив;
   
   Для каждого ЭлементМассива Из МассивПодстрок Цикл
       Если Найти(ЭлементМассива,",") > 0 Тогда
           ДопМассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаПереданныхАдресов);
           Для каждого ЭлементДопМассива Из ДопМассивПодстрок Цикл
               МассивПодстрокКОбработке.Добавить(ЭлементДопМассива);
           КонецЦикла;
       Иначе
           МассивПодстрокКОбработке.Добавить(ЭлементМассива);
       КонецЕсли;
   КонецЦикла;
   
   Для Каждого СтрокаАдреса ИЗ МассивПодстрокКОбработке Цикл
       
       Индекс = 1;               // номер обрабатываемого символа
       Накопитель = "";          // накопитель символов, после анализа перемещается либо в полное имя
       // либо в почтовый адрес
       ПолноеИмяАдресата = "";   // переменная, накапливающая имя адресата
       ПочтовыйАдрес = "";       // переменная, накапливающая e-mail адрес
       // 1 - формирование полного имени: ожидаются любые допустимые символы имени адресата
       // 2 - формирование почтового адреса: ожидаются любые допустимые символы email адреса
       // 3 - завершение формирования очередного почтового адреса - ожидаются символы разделители либо пробелы
       СтадияРазбора = 1;
       
       Пока Индекс <= СтрДлина(СтрокаАдреса) Цикл
           
           Символ = Сред(СтрокаАдреса, Индекс, 1);
           
           Если      Символ = " " Тогда
               Индекс = ? ((ПропуститьПробелы(СтрокаАдреса, Индекс, " ") - 1) > Индекс,
               ПропуститьПробелы(СтрокаАдреса, Индекс, " ") - 1,
               Индекс);
               Если      СтадияРазбора = 1 Тогда
                   ПолноеИмяАдресата = ПолноеИмяАдресата + Накопитель + " ";
               ИначеЕсли СтадияРазбора = 2 Тогда
                   ПочтовыйАдрес = Накопитель;
                   СтадияРазбора = 3;
               КонецЕсли;
               Накопитель = "";
           ИначеЕсли Символ = "@" Тогда
               Если      СтадияРазбора = 1 Тогда
                   СтадияРазбора = 2;
                   
                   Для ИндексПоискаНС = 1 По СтрДлина(Накопитель) Цикл
                       Если Найти(НедопустимыеСимволы, Сред(Накопитель, ИндексПоискаНС, 1)) > 0 Тогда
                           ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                                             СообщениеНедопустимыеСимволы,Сред(Накопитель, ИндексПоискаНС, 1),СтрокаАдреса);
                       КонецЕсли;
                   КонецЦикла;
                   
                   Накопитель = Накопитель + Символ;
               ИначеЕсли СтадияРазбора = 2 Тогда
                   ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                                     СообщениеНеверныйФорматПочтовогоАдреса,СтрокаАдреса);
               ИначеЕсли СтадияРазбора = 3 Тогда
                   ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                                     СообщениеНеверныйФорматПочтовогоАдреса,СтрокаАдреса);
               КонецЕсли;
           Иначе
               Если СтадияРазбора = 2 ИЛИ СтадияРазбора = 3 Тогда
                   Если Найти(НедопустимыеСимволы, Символ) > 0 Тогда
                       ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                                         СообщениеНедопустимыеСимволы,Символ,СтрокаАдреса);
                   КонецЕсли;
               КонецЕсли;
               
               Накопитель = Накопитель + Символ;
           КонецЕсли;
           
           Индекс = Индекс + 1;
       КонецЦикла;
       
       Если      СтадияРазбора = 1 Тогда
           ПолноеИмяАдресата = ПолноеИмяАдресата + Накопитель;
       ИначеЕсли СтадияРазбора = 2 Тогда
           ПочтовыйАдрес = Накопитель;
       КонецЕсли;
       
       Если ПустаяСтрока(ПочтовыйАдрес) И (Не ПустаяСтрока(ПолноеИмяАдресата)) Тогда
           ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                             СообщениеНеверныйФорматПочтовогоАдреса,ПолноеИмяАдресата);
       ИначеЕсли СтрЧислоВхождений(ПочтовыйАдрес,"@") <> 1 Тогда
           ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                             СообщениеНеверныйФорматПочтовогоАдреса,ПочтовыйАдрес);
       КонецЕсли;
       
       Если НЕ (ПустаяСтрока(ПолноеИмяАдресата) И ПустаяСтрока(ПочтовыйАдрес)) Тогда
           Результат.Добавить(ПроверитьИПодготовитьПочтовыйАдрес(ПолноеИмяАдресата, ПочтовыйАдрес));
       КонецЕсли;
       
   КонецЦикла;
   
   Возврат Результат;
   
КонецФункции


Просто и понятно. Ничего лишнего.
224 sergeante
 
30.11.11
13:58
(223) Самое главное, что алгоритм проверки очень легко дорабатывается!
225 oleg_km
 
30.11.11
14:49
(224) Строка RegExp тоже несложно дорабатывается
226 sergeante
 
01.12.11
16:20
(225) ты иронии не заметил?
227 ZUM
 
01.12.11
16:22
- Да у Вас проблемы с железом...
228 oleg_km
 
01.12.11
17:23
(226) Извини, иронию на Мисте сложно разглядеть. Привык распознавать по всяким значкам, типа ;)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.