2012-06-01 2 views
0

Я пытаюсь проверить строку электронной почты на Java, но у меня возникают проблемы с проверкой, когда эта строка содержит два или более специальных символа, которые не являются действительными по электронной почте ,Подтвердить повторение специальных символов с использованием регулярного выражения

Мои, если это делает это проверка заключается в следующем:

if (email.matches("(._\'!#$%&*+-\\/=?{|}~`^_-)\\1+")) { 
    return false; 
} 

Пример вывода:

this_e-mail'[email protected] - возвращает истину (ВЕРНО)

this_e-mail_isn''[email protected] - return true (WRONG)

Очевидно, что что-то не так с моим регулярным выражением.

Но я искал по всему Интернету, чтобы найти ответ, но не удалось.

Я только что прочитал, что, используя выражение «\ 1+» перед выражением, он должен был выполнить эту проверку, но, по-видимому, это не так.

Заранее благодарим за ответы!

ответ

0

Я не совсем уверен в ваших требованиях. Проверка подлинности электронной почты должна быть не только такой.

Однако, если вы хотите, чтобы определить, есть ли строка 2 специальных символы последовательно или нет, вы можете использовать

!string.matches("^.*([._\'!#$%&*+\\\\/=?{|}~`\\^-])\\1.*$") // It will invalidate the case that 2 consecutive characters are the same. e.g. not__valid, but it will give OK for va+-lid 
OR 
!string.matches("^.*[._\'!#$%&*+\\\\/=?{|}~`\\^-]{2}.*$") // Any sequence of consecutive special characters will be invalidate. e.g. not_+valid 

Обратите внимание, что я логически свести на нет результата. Я сопоставляю строку, если она содержит последовательные символы.

Я проверил и исправлю ошибку в более ранней редакции.

+0

То есть! Моя проверка не только такова, но только по этим двум символам, у меня возникла какая-то проблема ... Но теперь решено! Благодаря!! –

0

Итак, сначала ваше регулярное выражение пытается обнаружить некоторые специальные символы. $ обозначает конец строки, а \ $ обозначает знак доллара. Всякий раз, когда вам нужен специальный символ, вам нужно избегать его, преследуя его с помощью \ So, я считаю, что вы хотите обнаружить $, фигурные скобки, трубы, звездочки, вопросительные знаки и знаки плюс. Это лишь некоторые из многих специальных символов, которые вам нужно будет убежать.

Чтобы обнаружить кучу специальных символов, которые могут произойти ноль или более раз, вы должны использовать [] и * директиву, как это:

[#'&!?]* 

Это будет соответствовать любому количеству # или 'или! Или ?

Он может стать еще более холодным, используя \ W, что означает все, что не является символом, который вы найдете в слове.

Надеюсь, это поможет исправить вашу проблему. Похоже, вы воспользуетесь этой ссылкой: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

+0

Это не для каждого специального символа, это просто их toghether, и это может содержать много тех, если они разделены любым \\ w char. И жаль, что я забыл упомянуть, что символы в регулярном выражении - это те, которые не пройдут!Как я уже сказал, это лишь часть проверки, а другие специальные символы, которые не относятся к этой проверке, находятся в другом. Но спасибо за ответ! –

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