jQuery 电子邮件验证要求

Posted

技术标签:

【中文标题】jQuery 电子邮件验证要求【英文标题】:jQuery email validation requirements 【发布时间】:2010-09-23 00:57:10 【问题描述】:

我正在使用 jQuery.Validation 插件进行客户端验证,除此之外,我还验证了电子邮件地址。现在我还想在服务器端进行验证(对于没有 javascript 等的用户)。由于缺乏更好的想法,我开始使用正则表达式,但很快我意识到我想使用与 jQuery 方法相同的要求很重要。或者,如果我能找到某种方法来用我自己的方法覆盖 jQuery 验证要求,那也可以。

有人知道 jQuery 方法有什么要求吗?是正则表达式验证吗?如果是,表达式是什么?有没有办法覆盖它,即使我不知道?

(我注意到可以进行远程验证,但如果可能的话,我想避免这种额外的网络流量......)

【问题讨论】:

【参考方案1】:

jQuery 验证插件的源代码确实使用了一个怪物正则表达式。 您应该能够以系统语言在服务器端应用相同的正则表达式。

来源:

// http://docs.jquery.com/Plugins/Validation/Methods/email
email: function(value, element) 
    // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
    return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`\|~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`\|~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(element.value);
,

这里只是正则表达式部分:

/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`\|~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-
\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`\|~]|[\u00A0-\uD7FF\uF900-
\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([
\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF
\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF
\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(
\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[
\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF
\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-
\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[
\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF
\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
)))\.?$/

编辑:我之前没有注意到,但正则表达式中的一些字符被用作标记。我把它放在一个代码块中并添加了换行符。请注意,这些换行符是为了“可读性”而不是实际正则表达式的一部分。

【讨论】:

以上是关于jQuery 电子邮件验证要求的主要内容,如果未能解决你的问题,请参考以下文章

是否有符合我对多表单验证要求的 jQuery 插件? [关闭]

jQuery远程验证电子邮件验证服务

电子邮件验证 | jQuery

jQuery 表单验证,仅允许 .EDU 电子邮件地址

验证电子邮件地址时出现 jQuery 错误

为啥 jQuery 的电子邮件验证正则表达式如此简单?