2012-06-01 47 views
0

我想驗證在Java中的電子郵件字符串,但我遇到麻煩,以驗證此字符串有兩個或多個特殊字符時,這不是一個有效的電子郵件。驗證使用正則表達式重複特殊字符

我如果這樣做此驗證如下:輸出

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

例子:

this_e-mail'[email protected] - 返回true(正確)

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

好的,首先你的正則表達式試圖檢測一些特殊字符。 $表示一行的結尾,而\ $表示美元符號。每當你需要一個特殊的角色時,你需要在\之前跳過它。所以,我相信你想要檢測$,花括號,管道,星號,問號和加號。這些只是你需要逃脫的許多特殊字符中的一小部分。

爲了檢測一堆可能出現零次或多次的特殊字符,你需要使用[]和*指令是這樣的:

[#'&!?]* 

這將匹配#任何數字或'或!要麼 ?

它可以通過使用\ W甚至更酷,這意味着任何不是你會在單詞中找到的字符。

我希望這有助於解決您的問題。這聽起來像你會從這個鏈接中受益: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

+0

這不是每一個特殊的字符,它只是它們的一部分,如果被任何\\ w char分隔,它可能包含很多這些字符。對不起,因爲我忘記提到正則表達式中的字符是不能通過的字符!正如我所說,這只是驗證的一部分,而其他不屬於此驗證的特殊字符在另一個字符中。但謝謝你的答案! –

相關問題