0

我正在尝试使用以下正则表达式匹配字符串 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

Iam 当前使用的正则表达式匹配

    vamsideepak@gmail.iova,msideepak@gmail.comv

依此类推。如果我将使用的表达式的顺序反转为匹配 . 之后字符数较少的表达式,则会导致反转匹配值:

    vamsideepak@gmail.io,vamsideepak@gmail.co

等等。

我应该怎么做才能确保与案例 14 正确匹配。我应该分别验证使用这些组中的每一个吗?

4

2 回答 2

1

这应该适合你:

[A-Za-z0-9!#$%&’*+-/=?^_`\.{|}~]+@([a-z0-9_-]+[\.]?)*
于 2013-10-11T11:27:38.027 回答
0

下面函数中的正则表达式匹配 myname@myemail.edu.in,同时防止无效电子邮件。例如,它可以防止电子邮件地址中的相邻句点(如 my..name@myemail.edu.in)根据 RFC 822 是无效的。

public static boolean isValidEmail(String email) {
    return email.matches("\\A[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,4}\\z")
        && email.matches("^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*");
}

请参阅在 Java 中使用正则表达式验证电子邮件地址

于 2013-10-14T23:06:06.090 回答