|
Регулярные выражения в 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
|
||||
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) Извини, иронию на Мисте сложно разглядеть. Привык распознавать по всяким значкам, типа ;)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |