Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 20.02.2022, 21:11
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Ну вот же написали вам регулярку. Наверно она покрывает 95% возможных email адресов и возможных ошибок. Не думаю, что можно (или можно не безумно сложным способом) написать регулярку на 100% покрывающую все допустимые email и отлавливающие все ошибки
Ответить с цитированием
  #12 (permalink)  
Старый 21.02.2022, 09:08
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,577

Эти валидации емейла, можете из готовых либ поискать

Вот, например в yii, так делают (часть кода)

email: function (value, messages, options) {
            if (options.skipOnEmpty && pub.isEmpty(value)) {
                return;
            }

            var valid = true,
                regexp = /^((?:"?([^"]*)"?\s)?)(?:\s+)?(?:(<?)((.+)@([^>]+))(>?))$/,
                matches = regexp.exec(value);

            if (matches === null) {
                valid = false;
            } else {
                var localPart = matches[5],
                    domain = matches[6];

                if (options.enableIDN) {
                    localPart = punycode.toASCII(localPart);
                    domain = punycode.toASCII(domain);

                    value = matches[1] + matches[3] + localPart + '@' + domain + matches[7];
                }

                if (localPart.length > 64) {
                    valid = false;
                } else if ((localPart + '@' + domain).length > 254) {
                    valid = false;
                } else {
                    valid = options.pattern.test(value) || (options.allowName && options.fullPattern.test(value));
                }
            }

            if (!valid) {
                pub.addMessage(messages, options.message, value);
            }
        },
Ответить с цитированием
  #13 (permalink)  
Старый 21.02.2022, 09:50
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Вы сами то тестировали эту регулярку?
Все верные адреса она пропускает и все неверные отсекает?
Ответить с цитированием
  #14 (permalink)  
Старый 21.02.2022, 15:42
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,577

Да, там все сложнее оказывается, весь этот код выше для чего то своего, а паттерн вот тут тестируется - valid = options.pattern

, паттерн там такой:
https://www.yiiframework.com/doc/api/2.0/yii-validators-emailvalidator#$pattern-detail
Ответить с цитированием
  #15 (permalink)  
Старый 21.02.2022, 16:04
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Все равно всего он не проверяет. Либо не допускает корректные адреса, либо пропускает некорректные
Я уж не говорю про интернационализацию. (по современным протоколам почтовых серверов в адресе могут быть и кириллические буквы, и греческие, и арабские, и иероглифы).
https://ru.abcdef.wiki/wiki/Email_address
Поэтому слишком муторно (а возможно ли?) писать регулярку покрывающую 100% верных адресов, и отбрасывающую 100% неверных.
Да и нужно ли. Ведь пользователь может ошибиться в самом адресе.
Скажем напишет не voraa@gmail.com, а woraa@gmeil.com (что чаще и происходит)
И толку от этих всех проверок
Ответить с цитированием
  #16 (permalink)  
Старый 21.02.2022, 20:17
Интересующийся
Отправить личное сообщение для Andrew2108 Посмотреть профиль Найти все сообщения от Andrew2108
 
Регистрация: 18.02.2022
Сообщений: 22

Она покрывает все верные и не верные, но маил с пробелом в начале и в конце адреса проходит валидацию.
Регулярно уже есть, мне нужно, добавить в эту регулярно, чтобы эти пробелы не проходили валидацию, т. Е. Выдавало ошибку, если они будут присутствовать.
Ответить с цитированием
  #17 (permalink)  
Старый 21.02.2022, 20:41
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Andrew2108,
var regex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|("[\S.]+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

console.log([
    regex.test('asd@aasd.sd'),// true
    regex.test(' [email]asd@aasd.sd[/email] '),// false
    regex.test('asd@aasd.sd '),// false
    regex.test(' [email]asd@aasd.sd[/email]'),// false
    regex.test('asd@@aasd.sd'),// false
    regex.test('asd@aa@sd.sd'),// false
    regex.test('@asd@sd.sd'),// false
    regex.test('asd@sd.sd@'),// false
    regex.test(' @asd@sd.sd'),// false
    regex.test(' @asd@sd.sd '),// false
    regex.test(' [email]asd@sd.sd[/email]@'),// false
    regex.test(' [email]asd@sd.sd[/email]@ ')// false
]);
Ответить с цитированием
  #18 (permalink)  
Старый 21.02.2022, 21:05
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

А что насчет

kot.matroskin(familiya takaya)@mail.ru
kot.matroskin@[IPv6:2001:db8::1]
"kot\"matroskin\""@mail.ru

и
kot.matroskin@-mail.ru

Тута видимо такая же косая проверка стоит.
Верные не распознала, а неверный приняла

Последний раз редактировалось voraa, 21.02.2022 в 21:10.
Ответить с цитированием
  #19 (permalink)  
Старый 21.02.2022, 21:50
Интересующийся
Отправить личное сообщение для Andrew2108 Посмотреть профиль Найти все сообщения от Andrew2108
 
Регистрация: 18.02.2022
Сообщений: 22

Понятно, что проверка косая, критикуете-предлагайте, я попросил ведь ответ мне дать на конкретный вопрос, а не задавать мне вопросы. На данный момент я не знаю как регулярки писать поэтому и обратился за помощью к знающим.
Ответить с цитированием
  #20 (permalink)  
Старый 21.02.2022, 21:56
Интересующийся
Отправить личное сообщение для Andrew2108 Посмотреть профиль Найти все сообщения от Andrew2108
 
Регистрация: 18.02.2022
Сообщений: 22

" zzzz@mail.ru" - пропускает
или "zzzz@mail.ru " - также пропускает
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в середину текстового поля из нескольких слов вставить значение другого поля? AmigoArrigo Общие вопросы Javascript 5 29.03.2021 17:50
Как добавить уникальный идентификатор для нового поля формы? javascript_pupil Общие вопросы Javascript 4 19.12.2020 13:06
В value поля input находится не весь текст из поля DarkLordDark Общие вопросы Javascript 1 13.06.2014 00:17
C поля input в select dima_riabets Элементы интерфейса 3 18.03.2014 22:32
И снова о валидации (remote в jQuery.validation v1.7) Sufir jQuery 0 02.03.2011 13:50