Имя: Пароль:
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) видимо не подойдет, там список адресов нужно передавать.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн