2010-12-27 5 views
1

У меня есть окно редактирования. Я проверяю, является ли введенный адрес электронной почты действительным или нет.Java Pattern Matching: Pattern.compile

Pattern pattern1 = Pattern.compile("^[\\w-]*@[\\.\\w-]*$"); 
Pattern pattern2 = Pattern.compile("^\\w+$"); 
Matcher matcher1 = pattern1.matcher(string); 
Matcher matcher2 = pattern2.matcher(string);  
return matcher1.matches(); 
return matcher2.matches(); 

Проблема с этим, если мой ввод мой адрес электронной почты как [email protected] matcher возвращает false. Он рассматривает символ "." как недействительный.

Как мне изменить свой код так, чтобы он поддерживал «.». и совпадение возвращает true.

ответ

3

Это не понятно, почему у вас есть две модели (и две возвратные заявления!) Вместо одного ... но ваш первый шаблон включает в себя только \w и - перед знаком @, хотя после этого он позволяет .. Это легко изменить, так что первая часть такая же, как во второй части:

Pattern pattern1 = Pattern.compile("^[\\.\\w-]*@[\\.\\w-]*$"); 

Однако, есть множество сайтов, дающих гораздо более точный адрес электронной почты, соответствующих регулярных выражений - например this one in Perl (который я подозреваю достаточно просто переносит на Java). Также есть страница с fairly long explanation and Java code, если вы хотите также справиться с адресами, включая дружеские имена. Я уверен, что если вы будете искать вокруг, вы найдете образец, который соответствует вашим конкретным потребностям - хотя, как вы думаете, какие страницы надежны, это другое дело.

EDIT: Если вы хотите быть в состоянии соответствовать без последней части, вы можете сделать это по желанию, как это:

Pattern pattern1 = Pattern.compile("^[\\.\\w-]*(@[\\.\\w-]*)?$"); 
+0

Ваше решение работало исправлено моя проблема. Но теперь возникла вторая проблема, если я не введу «@» в поле редактирования, ответчик возвращает false. –

+0

@SpunkerBaba: Почему это проблема? Если нет, знак @ в поле редактирования, то это недействительно адрес электронной почты. –

+0

Согласно моему требованию, если нет знака @, я должен добавить свое доменное имя по умолчанию. Пользователь может ввести идентификатор электронной почты без @, я добавлю @ mydomain.com позже в свой код. –

0
Pattern.compile("^[\\w-\.]*@[\\.\\w-]*$") 

Обратите внимание, что эта модель будет соответствовать недействительным строкам (при условии, @ не действительный адрес электронной почты). И это также не соответствует другим адресам электронной почты действительным (т.е. [email protected])

+0

Jave бросает последовательность ошибки Invalid побег (допустимые из них \ Ь \ т \ п \ f \ r \ "\ '\\) –

+0

Я забыл избежать обратной косой черты. В Java, если вам нужно избежать символа в регулярном выражении, вам действительно нужно избежать этой обратной косой черты. Я оставлю ошибку, так как это очистит ее – Falmarri