HTML5电子邮件验证
据说“使用HTML5,我们不需要更多的js或服务器端代码来检查用户的输入是否是有效的电子邮件或url地址” 用户输入后如何验证电子邮件?如果用户输入了错误的电子邮件地址,没有JS如何显示消息HTML5电子邮件验证,html,email,Html,Email,据说“使用HTML5,我们不需要更多的js或服务器端代码来检查用户的输入是否是有效的电子邮件或url地址” 用户输入后如何验证电子邮件?如果用户输入了错误的电子邮件地址,没有JS如何显示消息 <input type="email" pattern="[^ @]*@[^ @]*" placeholder="Enter your email"> <input type="submit" value="Submit"> 在HTML5中,您可以这样做: <form>
<input type="email" pattern="[^ @]*@[^ @]*" placeholder="Enter your email">
<input type="submit" value="Submit">
在HTML5中,您可以这样做:
<form>
<input type="email" placeholder="Enter your email">
<input type="submit" value="Submit">
</form>
<form>
<input id="email" type="text" name="email" pattern="[a-zA-Z]{3,}@[a-zA-Z]{3,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}" required placeholder="Enter you Email">
<br>
<input type="submit" value="Submit The Form">
</form>
当用户按submit时,它会自动显示一条错误消息,如:
仅使用HTML5属性“模式”就很难正确验证电子邮件。如果您不使用“模式”,将处理某个人@。这是无效的电子邮件 使用
pattern=“[a-zA-Z]{3,}@[a-zA-Z]{3,}.[.]{1}[a-zA-Z]{2,}.[.]{1}[a-zA-Z]{2,}”
将要求格式为someone@email.com
但是,如果发件人的格式类似于someone@email.net.au
(或类似)将不会被验证以修复此问题,您可以将模式=“[a-zA-Z]{3,}@[a-zA-Z]{3,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}”
这将验证.com.au或.net.au或类似内容
但是,使用此功能将不允许someone@email.com验证。目前,仅使用HTML5验证电子邮件地址还不完全符合我们的要求。要完成此操作,您需要使用以下内容:
<form>
<input type="email" placeholder="Enter your email">
<input type="submit" value="Submit">
</form>
<form>
<input id="email" type="text" name="email" pattern="[a-zA-Z]{3,}@[a-zA-Z]{3,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}" required placeholder="Enter you Email">
<br>
<input type="submit" value="Submit The Form">
</form>
或:
但是,我不知道如何使用HTML5模式属性验证两个或所有版本的电子邮件地址。网站页面注意到,电子邮件地址是与以下正则表达式匹配的任何字符串:
/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
使用required
属性和pattern
属性要求值与regex模式匹配
<input
type="text"
pattern="/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/"
required
>
我知道您不想要Javascript解决方案,但是根据我的经验,有些事情,例如定制的验证消息,只能使用JS来完成 此外,通过使用JS,您可以动态地将验证添加到站点中电子邮件类型的所有输入字段,而无需修改每个输入字段
var validations ={
email: [/^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/, 'Please enter a valid email address']
};
$(document).ready(function(){
// Check all the input fields of type email. This function will handle all the email addresses validations
$("input[type=email]").change( function(){
// Set the regular expression to validate the email
validation = new RegExp(validations['email'][0]);
// validate the email value against the regular expression
if (!validation.test(this.value)){
// If the validation fails then we show the custom error message
this.setCustomValidity(validations['email'][1]);
return false;
} else {
// This is really important. If the validation is successful you need to reset the custom error message
this.setCustomValidity('');
}
});
})
以下是我用于所有表单电子邮件输入的示例。此示例为ASP.NET,但适用于任何:
<asp:TextBox runat="server" class="form-control" placeholder="Contact's email"
name="contact_email" ID="contact_email" title="Contact's email (format: xxx@xxx.xxx)"
type="email" TextMode="Email" validate="required:true"
pattern="[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*" >
</asp:TextBox>
HTML5在不需要的时候仍然使用该模式进行验证。还没有发现一个是假阳性
这将呈现为以下HTML:
<input class="form-control" placeholder="Contact's email"
name="contact_email" id="contact_email" type="email"
title="Contact's email (format: xxx@xxx.xxx)"
pattern="[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*">
使用[a-zA-Z0-9.-{1,}@[a-zA-Z.-]{2,}[.]{1}[a-zA-Z]{2,}
forsomemail@email.com
/somemail@email.com.vn
document.getElementById("email").validity.valid
字段为空或有效时似乎为真。这还有一些其他有趣的标志:
在Chrome中测试。TL;DR:唯一100%正确的方法是检查输入的电子邮件地址中的某处,然后将验证消息发布到给定的电子邮件地址。如果他们可以按照电子邮件中的验证说明操作,则输入的电子邮件地址是正确的
长答案:
多年前:
我们需要问两个问题:
用户是否理解他们应该键入电子邮件
是否将地址输入此字段
用户是否正确键入了自己的电子邮件
是否将地址输入此字段
如果您有一个布局良好的表格和标签
上面写着“email”,用户在某处输入一个“@”符号,然后
可以肯定地说,他们明白自己应该是这样的
输入电子邮件地址。简单
接下来,我们要做一些验证,以确定它们是否正确
输入他们的电子邮件地址
<input type="email" pattern="[^ @]*@[^ @]*" placeholder="Enter your email">
<input type="submit" value="Submit">
不可能
[……]
任何输入错误都肯定会导致错误的电子邮件地址,但可能只会导致无效的电子邮件地址。
[……]
尝试确定电子邮件地址是否“有效”是没有意义的。用户输入错误和有效的电子邮件地址的可能性远远大于输入无效的
换句话说,重要的是要注意,任何类型的基于字符串的验证只能检查语法是否无效。它不能检查用户是否确实可以看到电子邮件(例如,因为用户已经丢失了凭据、键入了其他人的地址或键入了工作电子邮件而不是给定用例的个人电子邮件地址)。你真正想问的问题是“这封电子邮件在语法上是否有效”而不是“我可以使用给定的电子邮件地址与用户通信吗?”如果你验证字符串的次数超过了“它是否包含@
”,那么你是在试图回答前一个问题!就个人而言,我总是只对后一个问题感兴趣
此外,一些可能在语法或政治上无效的电子邮件地址也可以使用。例如,。另请参见(HTML5最初的设计位置)。使用HTML5,只需将输入电子邮件设置为:
您也可以遵循此模式
<form action="/action_page.php">
E-mail: <input type="email" name="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$">
<input type="submit">
</form>
电邮:
Ref:派对有点晚了,但这个正则表达式帮助我在客户端验证电子邮件类型输入。不过,我们也应该在服务器端进行验证
<input type="email" pattern="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$">
你可以找到更多的各种正则表达式。,这个正则表达式可以验证电子邮件,因为符合规范的电子邮件应该匹配它
/^[a-zA-Z0-9.!$%&'*+\/=?^ `{124;}-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}
[a-zA-Z0-9](?:\[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9]))*$/
您始终需要在服务器端进行验证。聪明的客户端可以绕过任何客户端安全措施。在尝试设置HTML5表单验证时可能会有所帮助。当然,您可能仍然需要服务器端验证。在任何情况下都不应使用regex电子邮件验证。regex检查有太多缺陷。Th“验证”电子邮件地址的最佳方法是让他们键入两次,然后运行一个正则表达式检查,以给出一个