【发布时间】:2013-10-19 11:02:42
【问题描述】:
我正在尝试使用以下正则表达式匹配字符串 m-y_n.ame@myemail.edu.in:
([_A-Za-z0-9-.]+@[a-z0-9-]+[.][a-z]{2,3}[.][a-z]{2,3})
完整的正则表达式为:
([-A-Za-z0-9._!#$%^&*|{}'~`]+@[a-z0-9_-]+[\\.][a-z]{2,3}[\\.][a-z]{2,3})|([A-Za-z0-9.!#$%^&*|{}\"~`]+@[a-z0-9_-]+[\\.][a-z]{4})|([A-Z.a-z0-9!#$%^&*|{}'~`]+@[a-z0-9_-]+[\\.][a-z]{3})|([A-Za-z0-9.!#$%^&*_-|{}'~`]+@[a-z0-9_-]+[\\.][a-z]{2})
我需要对正则表达式进行哪些更改才能匹配指定的模式?
这些是我的一些测试用例:
1.vamsi$deepak0@gmail.com
2.v_a_m_s_i_d_e_e_p_a_k_0_3@gmail.com
3.v-a-m_si.deepak@gmail.com
4.vamsi$deepak03@gmail.co.in
5.v_a_m_s_i_d_e_e_p_a_k_0_3@gmail.co.in
6.v-a-m_si.deepak@gmail.co.in
7.vamsideepask03@bits-pilani.edu
8.vams-ideep_ask03@bits-pilani.edu
9.vamsi-d_.eepak03@gmool.biz
10.songs@gaana.in
11.vamsideep_-.ak03@footfall.net
12.jackspa_-.rrow@pirates.org
13.nomorespaceshuttles@nasa.gov
The most scary test case seems to be
14.vamsideepak@gmail.iovamsideepak@gmail.comvamsideepak0@gmail.co.invamsideepak@gmail.info
我当前使用的正则表达式匹配
vamsideepak@gmail.iova,msideepak@gmail.comv
以此类推。如果我将使用的表达式的顺序反转为匹配 . 之后字符数较少的表达式,则会导致反转匹配值:
vamsideepak@gmail.io,vamsideepak@gmail.co
等等。
我应该怎么做才能确保与案例 14 正确匹配。我应该分别使用这些组中的每一个进行验证吗?
【问题讨论】:
-
你的正则表达式最多应该是
^[^@]+@[^@]+$..Stop Validating Email Addresses With Complicated Regular Expressions -
为了稍微缩短正则表达式,您可以使用
\w(用Java 编写为\\w)代替[_A-Za-z0-9]。电子邮件地址也可以以_、.开头吗? -
根据这个答案,它可以从很多特殊字符开始:leading-underscores-in-an-email-address
-
@Anirudh 谢谢你的链接,我的应用程序不会向任何人发送验证电子邮件,因此我没有其他验证电子邮件的方法