Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Пробелы в валидации поля (https://javascript.ru/forum/misc/83707-probely-v-validacii-polya.html)

voraa 20.02.2022 21:11

Ну вот же написали вам регулярку. Наверно она покрывает 95% возможных email адресов и возможных ошибок. Не думаю, что можно (или можно не безумно сложным способом) написать регулярку на 100% покрывающую все допустимые email и отлавливающие все ошибки

micscr 21.02.2022 09:08

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

Вот, например в 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);
            }
        },

voraa 21.02.2022 09:50

Вы сами то тестировали эту регулярку?
Все верные адреса она пропускает и все неверные отсекает?

micscr 21.02.2022 15:42

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

, паттерн там такой:
https://www.yiiframework.com/doc/api/2.0/yii-validators-emailvalidator#$pattern-detail

voraa 21.02.2022 16:04

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

Andrew2108 21.02.2022 20:17

Она покрывает все верные и не верные, но маил с пробелом в начале и в конце адреса проходит валидацию.
Регулярно уже есть, мне нужно, добавить в эту регулярно, чтобы эти пробелы не проходили валидацию, т. Е. Выдавало ошибку, если они будут присутствовать.

Nexus 21.02.2022 20:41

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
]);

voraa 21.02.2022 21:05

А что насчет

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

и
kot.matroskin@-mail.ru

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

Andrew2108 21.02.2022 21:50

Понятно, что проверка косая, критикуете-предлагайте, я попросил ведь ответ мне дать на конкретный вопрос, а не задавать мне вопросы. На данный момент я не знаю как регулярки писать поэтому и обратился за помощью к знающим.

Andrew2108 21.02.2022 21:56

" zzzz@mail.ru" - пропускает
или "zzzz@mail.ru " - также пропускает


Часовой пояс GMT +3, время: 12:09.