Имя: Пароль:
1C
 
получить адрес эл. почты из строки
0 Prog_man
 
гуру
10.03.26
15:58
Добрый день,
подскажите как эл.почту получить из строки?
сейчас код такой:

Подробности
Функция мПолучитьЭлПочтуОтправителя(Строка)
    
    Шаблон = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";      
    
    RegExp = Новый COMОбъект("VBScript.RegExp");
    RegExp.Global = Истина;
    RegExp.Pattern = Шаблон;
    
    Результат = Новый Массив;
    
    Matches = RegExp.Execute(Строка);
    Для Каждого Match Из Matches Цикл
        Результат.Добавить(Match.Value);
    КонецЦикла;
    
    Возврат Результат;  
КонецФункции    


возвращает пустой массив
платформа 1С:Предприятие 8.5 (8.5.1.1150)
1 Мультук
 
гуру
10.03.26
15:22
(0)

А как быть с адресами а-ля

мультук@миста.рф

?

[хе-хе]
2 Prog_man
 
гуру
10.03.26
15:27
(1) с регулярками ранее не работал, может шаблон не верный (то что нагуглил), почта типа мультук@миста.рф, в 1с может и не грузиться
3 ads55
 
10.03.26
15:30
(2) а почему не ищешь разницу между первый пробел до "@" и первый пробел после "@"?

Так же проще, чем регулярки?
4 Chameleon1980
 
10.03.26
15:40
(3) наверное, "мы не ищем легких путей" :)
5 Prog_man
 
гуру
10.03.26
15:44
(3) хотел регулярки по юзать )) по сабжу то есть варианты, почему пустой массив?
6 ads55
 
10.03.26
15:49
(5) "по сабжу то есть варианты" - нет. Больше не мешаю.
"[a-zA-Z0-9.-]+\" - вот это - 9."-"]+"\" - кавычками лишнее выделил.
7 JohnGilbert
 
10.03.26
15:50
https://stepik.org/course/107335/syllabus

Бесплатная часть по синтаксису регулярок проходится за 4-5 часов. Вопросы отпадут быстро.
8 JohnGilbert
 
10.03.26
15:51
А на кой ляд VBScript.RegExp, если есть СтрНайтиПоРегулярномуВыражению?
9 rozer76
 
10.03.26
15:55
(0) Шаблон = "^[a-zA-Zа-яА-Я0-9._%+-]+@[a-zA-Zа-яА-Я0-9.-]+\.[a-zA-Zа-яА-Я]{2,}$";
10 rozer76
 
10.03.26
15:56
+ (9) случай в (1) обработает
11 rozer76
 
10.03.26
15:57
(8) платформа старая
12 Prog_man
 
гуру
10.03.26
15:57
(8) тестил, тоже не работало, видимо в шаблоне дело
13 Prog_man
 
гуру
10.03.26
15:58
(11) 1С:Предприятие 8.5 (8.5.1.1150)
14 Timon1405
 
10.03.26
15:58
(0) у Вас в выражении ^ и $ лишние: это якоря начала и конца строки, то есть подходят только строки которые являются емэйлом, но не содержат где-то емэйл
15 JohnGilbert
 
10.03.26
16:01
[\w\d.-]+@[\w]+.[\w]+
А дальше уже думать, что у тебя в начале и в конце (^&) или (\b)
16 JohnGilbert
 
10.03.26
16:03
(13) Значит используй СтрНайтиПоРегулярномуВыражению
17 Prog_man
 
гуру
10.03.26
16:04
(16) видимо так и сделаю, сейчас проверю шаблон
18 JohnGilbert
 
10.03.26
16:05
(17) https://regex101.com/ здесь можно регулярки отлаживать, помогает. А так респект за неиспользование способа из (3).
19 Timon1405
 
10.03.26
16:11
(17) RegExp.Ignorecace = истина надо ставить, у вас буквы только большие в шаблоне. в СтрНайтиПоРегулярномуВыражению оно 3м параметром идет, тоже важно истину писать
20 Prog_man
 
гуру
10.03.26
16:13
благодарю, получилось
21 JohnGilbert
 
10.03.26
16:14
(19) Очень спорный совет
22 Prog_man
 
гуру
10.03.26
16:15
(19) ок, вроде и так работает
23 JohnGilbert
 
10.03.26
16:16
(22) Не надо. \w - уже буквы в верхней и нижней раскладке.
24 Prog_man
 
гуру
10.03.26
16:21
(23) 👍
25 probably
 
10.03.26
16:37
{2,} - это означает 2 символа? то есть адреса типа .com не не рассматриваются?
а так же, правильно ли я понимаю, что не рассматриваются адреса формата jet.msk.su?
26 Мимохожий Однако
 
10.03.26
16:39
БСП 3.2.1 Результат = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(СписокАдресов)
27 Timon1405
 
10.03.26
16:40
(25) это 2+ символа, то есть .ru .com .other подойдет, а .z не подойдет
28 Fish
 
гуру
10.03.26
16:40
(26) Ну вот. Сразу с козырей зашел.
29 JohnGilbert
 
10.03.26
16:43
(15) Точки экранировать забыл.
(25) [\w\d\.-]+@[\w]+\.[\w\.]+ так найдет адреса с любым количеством точек
30 JohnGilbert
 
10.03.26
16:46
(29) [\w\d\.-]+@[\w\.]+
упрощается до такой формы. \w не содержит пробел.
31 Fish
 
гуру
10.03.26
16:53
(30) Неправильно. кривой адрес типа  fgdfg@ya..ya__ находит
32 JohnGilbert
 
10.03.26
16:56
(31) Согласен) Но, если речь про реальные адреса почты, мы такой не встретим, т.к. там ограничения почтовых сервисов на нейминг. Если искать в сыром тексте адреса имейлов, то будет куча корнер кейсов, которые надо обыгрывать, как ваш.
33 Fish
 
гуру
10.03.26
16:59
(32) На самом деле вариант (26) решает задачу. В т.ч. и проводит проверку корректности адреса. Зачем, как Гений, изобретать велосипеды?
34 JohnGilbert
 
10.03.26
17:00
(33) Спорить не буду вовсе. Регулярки - чисто академический интерес. Пару раз меня выручили, там где типовых методов нет.
В ситуации ТС использовать метод из (26) лучший вариант.
35 Fish
 
гуру
10.03.26
17:02
(32) "если речь про реальные адреса почты, мы такой не встретим" - Речь в (0) про получение адреса из строки. Откуда взята эта строка - неизвестно, и реальные там адреса или баба Маня руками с бумажки вбивает, тоже неизвестно. Поэтому, имхо, лучше проверять корректность, чем не проверять.
36 JohnGilbert
 
10.03.26
17:04
(35) Вы правы. Т.к. уточнений про бабу Маню не было, я исходил из реальных адресов.
Метод из (26) вроде тоже это не решает.
// Параметры:
//  СписокАдресов - Строка - адреса электронной почты, разделитель - запятая, либо точка с запятой:
//                           Получатель1 <Адрес1>, Получатель 2 <Адрес2>... Получатель N <АдресN>.
Тут тоже придётся адреса найти и передать.
37 Prog_man
 
гуру
10.03.26
17:18
(35) там типовой текст, из заявки с сайта, т.е. если в форму обратной связи, заполнят не корректный адрес, то почта и не придет. в самой форме тоже проверка на корректность адреса эл. почты. (26) видимо не подойдет, там список адресов нужно передавать.
Закон Брукера: Даже маленькая практика стоит большой теории.