20.02.2022, 21:11
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Ну вот же написали вам регулярку. Наверно она покрывает 95% возможных email адресов и возможных ошибок. Не думаю, что можно (или можно не безумно сложным способом) написать регулярку на 100% покрывающую все допустимые email и отлавливающие все ошибки
|
|
21.02.2022, 09:08
|
|
Профессор
|
|
Регистрация: 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);
}
},
|
|
21.02.2022, 09:50
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Вы сами то тестировали эту регулярку?
Все верные адреса она пропускает и все неверные отсекает?
|
|
21.02.2022, 15:42
|
|
Профессор
|
|
Регистрация: 10.09.2009
Сообщений: 1,577
|
|
Да, там все сложнее оказывается, весь этот код выше для чего то своего, а паттерн вот тут тестируется - valid = options.pattern
, паттерн там такой:
https://www.yiiframework.com/doc/api/2.0/yii-validators-emailvalidator#$pattern-detail
|
|
21.02.2022, 16:04
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Все равно всего он не проверяет. Либо не допускает корректные адреса, либо пропускает некорректные
Я уж не говорю про интернационализацию. (по современным протоколам почтовых серверов в адресе могут быть и кириллические буквы, и греческие, и арабские, и иероглифы).
https://ru.abcdef.wiki/wiki/Email_address
Поэтому слишком муторно (а возможно ли?) писать регулярку покрывающую 100% верных адресов, и отбрасывающую 100% неверных.
Да и нужно ли. Ведь пользователь может ошибиться в самом адресе.
Скажем напишет не voraa@gmail.com, а woraa@gmeil.com (что чаще и происходит)
И толку от этих всех проверок
|
|
21.02.2022, 20:17
|
Интересующийся
|
|
Регистрация: 18.02.2022
Сообщений: 22
|
|
Она покрывает все верные и не верные, но маил с пробелом в начале и в конце адреса проходит валидацию.
Регулярно уже есть, мне нужно, добавить в эту регулярно, чтобы эти пробелы не проходили валидацию, т. Е. Выдавало ошибку, если они будут присутствовать.
|
|
21.02.2022, 20:41
|
Профессор
|
|
Регистрация: 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
]);
|
|
21.02.2022, 21:05
|
|
Профессор
|
|
Регистрация: 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.
|
|
21.02.2022, 21:50
|
Интересующийся
|
|
Регистрация: 18.02.2022
Сообщений: 22
|
|
Понятно, что проверка косая, критикуете-предлагайте, я попросил ведь ответ мне дать на конкретный вопрос, а не задавать мне вопросы. На данный момент я не знаю как регулярки писать поэтому и обратился за помощью к знающим.
|
|
21.02.2022, 21:56
|
Интересующийся
|
|
Регистрация: 18.02.2022
Сообщений: 22
|
|
" zzzz@mail.ru" - пропускает
или "zzzz@mail.ru " - также пропускает
|
|
|
|