Спросить
Как проверить электронную почту, которая принимает все латинские символы?
- Под латинскими символами я подразумеваю буквы с ударением,
ñ
,ç
и все те, которые используются в таких языках, как испанский, португальский, итальянский... латынь.
Контекст
- Цель состоит в том, чтобы отображать значок рядом с текстом, когда пользователь вводит свой адрес электронной почты.
- Я не заинтересован в том, чтобы принимать все допустимые случаи. Это было дизайнерское решение охватить только самые частые электронные письма. То есть буквы (включая диакритические знаки и тому подобное) и символы
._%+-
. - Я могу использовать код из других источников, если они популярны (например, jQuery).
Код
document.getElementById('email').addEventListener('input', function() {
campo = event.target;
valido = document.getElementById('emailOK');
emailRegex = /^[-\w.%+]{1,64}@(?:[A-Z0-9-]{1,63}\.){1,125}[A-Z]{2,63}$/i;
//Se muestra un texto a modo de ejemplo, luego va a ser un icono
if (emailRegex.test(campo.value)) {
valido.innerText = "válido";
} else {
valido.innerText = "incorrecto";
}
});
<p>
Email:
<input id="email">
<span id="emailOK"></span>
</p>
случаи
Я использую регулярное выражение
/^[-\w.%+]{1,64}@(?:[A-Z0-9-]{1,63}\.){1,125}[A-Z]{2,63}$/i
Что идеально работает в таких случаях, как
[email protected]
[email protected]
Но не работает с ударениями и другими латинскими буквами
germá[email protected]
yo@mi-compañía.com
estaçã[email protected]
С помощью этого регулярного выражения вы можете проверить любой адрес электронной почты, содержащий символы Unicode:
Если вы протестируете его в консоли JavaScript:
Шрифт
Оттуда, и как вы очень хорошо упомянули, выражение, которое лучше всего соответствует вашим потребностям, будет следующим:
Существуют определенные ограничения для электронных писем, но я могу отметить, что они должны регулярно основываться на следующих правилах:
Существуют ограничения для определенных типов электронной почты, например, если они содержат:
Примеры, которые не принимаются в качестве действительных адресов электронной почты:
Узнать больше :
https://en.wikipedia.org/wiki/Email_address https://www.rfc-editor.org/rfc/rfc5322
Я представляю электронное письмо с кириллическими символами, еще хуже, если вы хотите сохранить эти данные в БД, какой тип сопоставления SQL использовать!
Но хорошо, вопрос касается того, как проверить этот тип электронных писем, это скрипт, который поможет с задачей:
например:
Скрипт покажет вам, что адрес электронной почты правильный.
Теперь можно использовать международные символы в именах доменов и адресах электронной почты .
Традиционные адреса электронной почты ограничены символами английского алфавита и некоторыми другими специальными символами. Ниже приведены действительные традиционные адреса электронной почты:
Международная электронная почта, напротив, использует символы Unicode , закодированные как UTF-8 , что позволяет кодировать текст адресов в большинстве мировых систем письма.
Ниже приведены все действительные международные адреса электронной почты:
Я нашел здесь статью, в которой рассказывается о нескольких различных операторах регулярных выражений, которые могут проверять адреса электронной почты на основе стандарта RFC. Существует множество различных рекомендуемых операторов регулярных выражений, и не существует единого универсального решения. Но это регулярное выражение, вероятно, является тем, с которым я бы пошел, добавляя символы с диакритическими знаками в список допустимых символов.
Единственный 100% безопасный способ проверить действительность электронного письма — отправить его. Если пользователь ввел адрес электронной почты неправильно, он просто повторит попытку.
Согласно RFC 5322 ,
[email protected]
это «действительное» электронное письмо, но получит ли его кто-нибудь? Есть ли сервер за доменом, который принимает электронную почту? Это те заботы, которые у вас должны быть. Что бы вы ни делали, список рассылки, регистрация и т. Вы должны отправить электронное письмо с подтверждением, чтобы подтвердить его . Реализация будет зависеть от используемого вами стека (C#, PHP, Java?), и у вас будут действительные электронные письма, которые кто-то получает.Вы можете реализовать что-то на стороне клиента, которое, по крайней мере, говорит «это адрес электронной почты», но это не должно быть вашим инструментом «проверки», он просто пытается заставить пользователя понять, что он набрал # ($^ % #$@^( #$^.com. Если клиент использует современный браузер, вы можете использовать его
<input type="email">
в своей форме, это избавит вас от необходимости поддерживать регулярное выражение.Просто отметим, что, согласно официальной спецификации , REGEX, представляющий орфографически действительный адрес электронной почты, выглядит следующим образом:
Я намеренно использую термин « действительный адрес электронной почты » , потому что действительно действительный адрес электронной почты определяется тем, что он работает, то есть существует и может получать электронные письма.
Отсюда следует, что проверки через Javascript недостаточно. Это может помочь нам выполнить проверку орфографии , если на стороне клиента включен Javascript.
Если вы хотите убедиться, что электронное письмо действительно существует , нет другого способа, кроме как отправить электронное письмо и получить ответ от получателя. Это то, что можно назвать со всем свойством реальной проверкой электронной почты .
Фактически, это то, что делают все серьезные службы подписки: они отправляют нам электронное письмо, которое мы должны проверить, чтобы быть окончательно зарегистрированными на их сайтах или в их списках рассылки.
Позвольте мне графически показать шаги для проверки электронной почты. Мы увидим, что здесь обсуждается только этап 2 процесса проверки, который будет состоять из 5 этапов :
Пока мы не достигнем этапа 5, мы не можем сказать, что письмо было проверено .
Если OP по-прежнему запрашивает метод проверки, который принимает адреса с ñ и другими символами, которые до сих пор не определены официальной спецификацией w3.org (ссылка выше), REGEX, упомянутый в предыдущем ответе, работает.
Следующий код тот же, что и в вопросе, но реализующий, с одной стороны, официальный REGEX и REGEX, который позволяет использовать латинские символы, такие как ñ.
Проверка орфографии в HTML5
HTML5 позволяет нам объявить наш
input
тип электронной почты и обрабатывает (частично) проверку для нас, как говорит MDN :Его можно комбинировать
email
с атрибутомpattern
:Недостатком является то, что не все клиенты поддерживают HTML5.
Согласно RFC 6531, должно поддерживаться больше символов, чем мы привыкли. Но серверы ограничивают его предыдущими. Я не вижу решения с одним диапазоном, который включает ввод «всех латинских символов». Хотя кажется, что они идут вместе (как в этой таблице от 0080 до 00FF ), между ними есть другие.
Возможное регулярное выражение для латинских символов, которые могут вас заинтересовать ( источник ) и добавление ( предложение ):
Его можно было бы комбинировать с вашим регулярным выражением, уже указанными выше или одним согласно RFC 2822, вот так, чтобы оно не исключало интересующие вас диапазоны (там много типов акцентов) ( источник ):