|
получить адрес эл. почты из строки ass1c, Chameleon1980, 1cVandal, ads55, unenu, d4rkmesa, ЯнСмит, Мультук, Кирпич, RomanYS, ДенисСмирнов, maxar, Fish, nick86, sxfoxi, Hawk_1c, denk32, Gucci76, RomaH, Александр111, Хряк, Fregat, Stepashkin, Timon1405, Шаграм, obs191, vbus, serpentt, crotnn, evgeniy_n, nabd, integer, Silgis, Smallrat, toypaul, Prog_man, Гипервизор, DemonShinji2, SleepyHead, вым, Redkiy
| ☑ | ||
|---|---|---|---|---|
|
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) видимо не подойдет, там список адресов нужно передавать.
|
|||
|
38
Мимохожий Однако
10.03.26
✎
17:48
|
(37) Проверял или предполагаешь?
|
|||
|
39
Garykom
гуру
10.03.26
✎
18:55
|
https://habr.com/ru/articles/320572/
Итог
Бессмысленно пытаться выяснить, является ли адрес «действительным». Пользователь с гораздо большей вероятностью введёт неправильный и действительный адрес, чем недействительный. Поэтому лучше потратить своё время буквально на любое другое дело, чем проверять валидность адресов электронной почты. На 100% правильный способ Высылайте пользователям письмо активации. (Здесь жирная точка для эффекта). |
|||
|
40
Garykom
гуру
10.03.26
✎
19:01
|
Поиск email в строке очень простой:
1. Находим @ 2. Находим все слева и справа от @ до первого символа который недопустим в email (разделителя) 3. Все что посередине с @ = email! |
|||
|
41
Garykom
гуру
10.03.26
✎
18:58
|
(40)+ Если надо найти несколько email в строке - использовать рекурсию
После выкусывания первого email из строки, остаток подаем заново на вход |
|||
|
42
Волшебник
10.03.26
✎
19:25
|
(39)(40) Присоединяюсь к мнению. В общем виде задача нерешаемая без Попытка...Исключение.
|
|||
|
43
Кирпич
11.03.26
✎
11:02
|
(0) у тя регулярка проверяет не является ли строка адресом email, а не ищет адреса в тексте. Поставь спереди (\s|^) вместо ^ и сзади (\s|$) вместо $
|
|||
|
44
Кирпич
11.03.26
✎
11:05
|
А еще лучше типа такого (?:\s|^)
|
|||
|
45
Кирпич
11.03.26
✎
11:19
|
А еще лучше вабще убрать ^ и $ :)
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |