问
如何验证接受所有拉丁字符的电子邮件?
- 拉丁字符是指重音字母,,,
ñ
以及ç
所有被西班牙语,葡萄牙语,意大利语......拉丁语等语言使用的字母。
语境
- 目标是在用户键入他们的电子邮件地址时在文本旁边显示一个图标。
- 我对接受所有有效案例不感兴趣。仅涵盖最常见的电子邮件是一项设计决定。即字母(包括重音符号等)和符号
._%+-
。 - 我可以使用其他来源的代码,只要它们很流行(例如 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 排序规则!
但是,问题是指如何验证这种类型的电子邮件,这是一个有助于完成任务的脚本:
例如:
该脚本将向您显示电子邮件地址是正确的。
现在可以在域名和电子邮件地址中使用国际字符。
传统的电子邮件地址仅限于英文字母和其他一些特殊字符。以下是有效的传统电子邮件地址:
相比之下,国际电子邮件使用编码为UTF-8 的Unicode字符,这允许在世界上大多数书写系统中对地址文本进行编码。
以下是所有有效的国际电子邮件地址:
我在这里找到了一篇文章,其中讨论了一些可以根据 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 中的拼写检查
正如 MDN 所说, HTML5 允许我们声明我们的
input
电子邮件类型并(部分)为我们处理验证:它可以
email
与属性结合pattern
:缺点是并非所有客户端都支持 HTML5。
根据 RFC 6531,应该支持比我们习惯更多的字符。但是服务器将其限制为以前的服务器。我没有看到涉及输入“所有拉丁字符”的单一范围的解决方案。虽然它们似乎在一起(如在这张表中从 0080 到 00FF),但在两者之间还有其他的。
您可能感兴趣的拉丁字符的可能正则表达式(source)并添加(Suggestion):
它可以与您的正则表达式、上面已经指出的或根据 RFC 2822 的一个相结合,就像这样,这样它就不会排除您感兴趣的范围(有多种类型的重音)(来源):