HTML5电子邮件validation
据说“使用HTML5,我们不需要更多的js或服务器端代码来检查用户的input是否是有效的电子邮件或url”
如何在用户input后validation电子邮件? 如果用户input他/她的电子邮件地址的错误forms,没有JS如何显示消息。
<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>
而当用户按提交,它会自动显示一个错误消息,如:
input type=email
http://www.w3.org站点的;input type=email
页面注意到,电子邮件地址是与以下正则expression式匹配的任何string:
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
使用required
属性和pattern
属性来要求值匹配正则expression式模式。
<input type="text" pattern="/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/" required >
使用[a-zA-Z0-9.-_]{1,}@[a-zA-Z.-]{2,}[.]{1}[a-zA-Z]{2,}
somemail@email.com
/ somemail@email.com.vn
以下是我用于所有表单电子邮件input的示例。 这个例子是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仍然使用该模式进行validation。 还没有find一个这是一个误报。
这呈现为以下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-]+)*">
我知道你不是在Javascript解决scheme之后,但是有一些东西,比如定制的validation信息,根据我的经验,只能用JS完成。
而且,通过使用JS,您可以dynamic地将validation添加到您的站点内的所有types为电子邮件的input字段,而不必修改每个input字段。
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(''); } }); })
document.getElementById("email").validity.valid
当字段为空或有效时似乎是真实的。 这也有一些有趣的标志:
在Chrome中testing
使用HTML5属性“模式”来正确validation电子邮件是非常困难的。 如果你不使用“模式”,将会处理someone @。 这不是有效的电子邮件。
使用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
(或类似)将不会被validation来解决这个问题可以放pattern="[a-zA-Z]{3,}@[a-zA-Z]{3,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}"
这将validation.com.au或.net.au或类似。
但是,使用这个,它不会允许someone@email.comvalidation。 所以就简单地使用HTML5来validation电子邮件地址仍然不完全与我们。 要完成这个你会使用这样的东西:
<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>
要么:
<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,}[.]{1}[a-zA-Z]{2,}" required placeholder="Enter you Email"> <br> <input type="submit" value="Submit The Form"> </form>
但是,我不知道如何使用HTML5模式属性validation两个或所有版本的电子邮件地址。