2013-10-11 3 views
1

Я пытаюсь соответствовать строке [email protected], используя следующее регулярное выражение:не могли соответствовать [email protected] в Java

([_A-Za-z0-9-.][email protected][a-z0-9-]+[.][a-z]{2,3}[.][a-z]{2,3}) 

Полное регулярное выражение is:

([-A-Za-z0-9._!#$%^&*|{}'~`][email protected][a-z0-9_-]+[\\.][a-z]{2,3}[\\.][a-z]{2,3})|([A-Za-z0-9.!#$%^&*|{}\"~`][email protected][a-z0-9_-]+[\\.][a-z]{4})|([A-Z.a-z0-9!#$%^&*|{}'~`][email protected][a-z0-9_-]+[\\.][a-z]{3})|([A-Za-z0-9.!#$%^&*_-|{}'~`][email protected][a-z0-9_-]+[\\.][a-z]{2}) 

Какие изменения необходимо внести в регулярное выражение, чтобы соответствовать указанному шаблону?

Вот некоторые из моих тестов:

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
The most scary test case seems to be 
[email protected]@[email protected]@gmail.info 

Регулярного выражение И в настоящее время, используя спичку

[email protected],[email protected] 

и так on.If я изменить порядок выражения я использую для сопоставления выражение с меньшим количеством charecters после., оно вызывает значения согласования разворота как:

[email protected],[email protected] 

и так далее.

Что я должен сделать, чтобы обеспечить правильное совпадение с регистром 14. Должен ли я проверять использование каждой из этих групп отдельно.

+2

Максимальное ваше регулярное выражение должно быть '^ [^ @] + @ [^ @] + $' .. [Прекратить проверку адресов электронной почты со сложными регулярными выражениями] (http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex /) – Anirudha

+0

Чтобы немного сократить регулярное выражение, вы можете использовать '\ w' (написанный на Java как' \\ w') вместо '[_A-Za-z0 -9] '. Также может начаться адрес электронной почты с '_',' .'? – Pshemo

+0

В соответствии с этим ответом, он может начинаться с множества специальных charecters: [lead-underscores-in-a-email-address] (http://stackoverflow.com/questions/9200881/leading-underscores-in-an-email -адрес) – vamsiampolu

ответ

1

это должно работать для вас:

[A-Za-z0-9!#$%&’*+-/=?^_`\.{|}~][email protected]([a-z0-9_-]+[\.]?)* 
+0

. После тестирования на rubular и regexplanet я обнаружил, что он распознает электронную почту только до domain name.Also я могу использовать [.] вместо [\.]. Еще одна вещь, я хотел бы извлечь несколько писем из одной строки, и я не могу доверять своему источнику неявно. – vamsiampolu

+0

У меня была проблема, когда myname @ myemail.comyourname @ youremail.com были частью строки. Что мне делать в таком случае? – vamsiampolu

0

Регулярные выражения в функции ниже спичек [email protected], предотвращая некорректные сообщения электронной почты. Например, он предотвращает смежные периоды адрес электронной почты, как 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}$).*"); 
} 

См validate email address using regular expression in Java.

+0

Пожалуйста, проверьте случай 14. Возможность возникновения этого случая не является тривиальной. Могу ли я изменить выражение, которое я использую, чтобы соответствовать случаю 14, потому что моя строка довольно большая и очень неуправляемая. Хотелось бы, чтобы я просто сопоставил электронную почту как вы. – vamsiampolu

+0

Кроме того, я знаю, что gov.in действительно, так же верно [\.] [A-z] {2,3} [\.] [A-z] {2}. – vamsiampolu

+0

В случае 14 вам нужен какой-то разделитель между адресами электронной почты, иначе почти невозможно правильно сопоставить строку. Регулярное выражение, которое я предоставил, должно иметь возможность проверить gov.in – Geek

Смежные вопросы