欢迎光临!我有一个Spring应用程序和一个表单在后端和前端进行验证。在后端,我在org.springmodules.validation的帮助下对电子邮件字段使用了基于注释的验证。到目前一切尚好。
在前端,我决定使用jQuery表单验证插件,发现前后验证不同步。
例如:一个@B.C通过了jQuery验证,但没有通过Spring验证。我看了两眼,两眼交叉。
有谁愿意评论一下使用这两种方法的利弊?
下面是它们:
jQuery验证插件 regex:(原始资料来源在此)
^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$
org.springmodules.validation正则表达式:
^((([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])))\.?$
提前谢谢一堆人!
发布于 2009-12-15 21:04:00
更别提中文/阿拉伯域名将被允许进入不久的将来。每个人都必须更改使用的电子邮件正则表达式,因为这些字符肯定不会被[a-z]/i
或\w
覆盖。他们都会失败。
毕竟,验证电子邮件地址的最佳方法仍然是将电子邮件实际发送到有关地址以验证地址。如果电子邮件地址是用户身份验证的一部分(注册/登录/等),那么您可以将其与用户激活系统完美地结合在一起。例如,发送带有具有指定电子邮件地址的唯一激活键的链接的电子邮件,并且仅在用户使用电子邮件中的链接激活新创建的帐户时才允许登录。
如果regex的目的只是快速通知UI中的用户指定的电子邮件地址不符合正确的格式,最好还是检查它是否与以下regex基本匹配:
^([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)$
就这么简单。为什么你会关心在名称和域名中使用的字符?输入有效的电子邮件地址是客户的责任,而不是服务器的。
发布于 2009-12-15 21:01:23
通过regex匹配电子邮件是一项困难的任务。jQuery验证的准则是(!)为了简单。这是如此简单,甚至会失败的许多电子邮件地址,实际上是有效的。再一次出现了一个例子:“嘿,外面只有ASCII,因为有效的字符只是忘记了世界的其他部分”。
一个有效的电子邮件地址,带有德语字母
föobar@example.com
我的建议是用spring后端验证电子邮件,在客户端跳过这一步。之后,你必须发送一封测试邮件,以检查邮件是否真的有效,活动,.
发布于 2009-12-15 21:17:12
有一百万种可能的解决办法,但我喜欢:
^[^<>\s\@]+(\@[^<>\s\@]+(\.[^<>\s\@]+)+)$
在本质上,这是它所做的:
这意味着,当中文/阿拉伯域名如BalusC所提到的被允许时,它将允许使用外文字符。但是它会捕捉到严重的错误,比如缺少的@符号、域名没有点、空格等等。此外,它在Javascript中的行为将与我所知道的任何基于Perl的正则表达式语言中的行为相同。因此,它对于客户端和服务器端验证都是一个很好的候选。
我在这里创建了测试用例:
http://regexhero.net/tester/?id=4a1f18cf-3dc0-4157-ab74-489a69e184ee
我相信您可以输入一些无效的地址,这个正则表达式将匹配这些地址。但是为了网络验证的目的,我不太关心这个问题。我的意思是,正则表达式永远不会完全取代真正的电子邮件验证。
因此,就我个人而言,我最关心的是在允许所有可能有效的电子邮件地址的同时,捕获最常见的错误。如果有人能找到一个有效的电子邮件地址,这个regex不匹配,我想知道它。在那之前,这是我要用的。;)
https://stackoverflow.com/questions/1910340
复制相似问题