2015-05-01 26 views
1

我想驗證Java中的名稱,該名稱將允許單個時間的以下特殊字符{, - 。'}。我能夠用Expression來實現,這將允許用戶只在字符串中輸入這些特殊字符。但我無法弄清楚如何在用戶無法多次添加這些字符的情況下添加限制。我試圖用量詞來實現它,但仍不成功。我已經完成了以下代碼!使用正則表達式的特殊條件名稱驗證

Pattern validator = Pattern.compile("^[a-zA-Z+\\.+\\-+\\'+\\,]+$"); 
+1

你可以發佈一些示例字符串 – vks

+0

@vks這裏是示例(John O'Malley-Smith)(John O'Malley-Smith) –

回答

1

你可以在你的正則表達式使用前向斷言:

Pattern validator = Pattern.compile(
    "^(?!(?:.*?\\.){2})(?!(?:.*?'){2})(?!(?:.*?,){2})(?!(?:.*?-){2})[a-zA-Z .',-]+$"); 

(?!(?:.*?[.',-]){2})是負先行,這意味着不允許超過1字符類這些字符。

RegEx Demo

+0

,但它驗證「John O'Malley-Smith」爲false! –

+0

因爲該字符串有一個空格和錯誤的引號'''。 ,請參閱我的更新回答 – anubhava

+0

仍然驗證John O'Malley-Smith爲假。你能否讓它變得像它允許{。 ' - 。}單次。允許帶空格的字母 –

0

我認爲,你可以考慮在那裏的名字此類字符只會發生一次。名稱,如「喬納森的」,「湯姆斯達姆」,「湯姆斯,喬恩」,「喬納森。湯姆斯」。在名稱實踐中,我不認爲這樣的特殊字符會出現在字符串的邊緣。因此,你可能會得到一個正則表達式,如:

Pattern validator = Pattern.compile(「^ [a-zA-Z] +(?:[ - ',\。] [a-zA-Z ?] +)$「);

這個正則表達式應該匹配一個常規的ASCII名稱,後面跟隨一個單獨的「特殊」字符,後面跟着另一個名字。