2013-04-10 57 views
1

說,我這種模式 「[A-ZA-Z - ] *」 驗證輸入字段時,我使用:java的正則表達式 - 匹配一個OCCURENCES僅

if (input.matches("[A-Za-z -]*")) { 
    return true; 
} else { 
    return false; 
} 

基本上,我檢查如果輸入符合我的字段驗證要求(字母,空格和短劃線(僅允許一個短劃線))。我的問題是,只有當它包含字母,空格和短劃線(僅限一次DASH)時,我纔會返回true,即使輸入了很多破折號,我的當前代碼也會返回true。如何限制我的模式以檢測短跑是否超過一次?謝謝!

+0

是否需要* *有一個幾許?它可以由*只*一個短劃線組成,還是它也需要其他字符?短跑必須處於特定的位置嗎? – 2013-04-10 05:19:59

回答

2

以下是等同於你的正則表達式,但它最多允許一個破折號:

[A-Za-z ]*-?[A-Za-z ]* 

此匹配零個或多個字母/空格,然後在最多一個破折號,隨後是零個或多個字母/位。

+0

如果破折號出現在開始/結束處,它能夠檢測到它嗎? – lorraine 2013-04-10 08:40:04

0

從刪除短劃線開始。

if(input.indexOf('-') != 0) input.replaceFirst("-", " "); 

然後,因爲你只刪除了一個破折號,你可以不檢查連字符運行正則表達式查詢。如果存在,則查詢將返回false。

0

使用負看看輸入的提前啓動掛靠:

^(?!(.*-){2})[A-Za-z -]*