2014-02-27 58 views
0

我想通過正則表達式驗證字符串。 驗證是: 每個字符都是有效的,但字符串不能只包含連字符或僅包含空格。 例如使用RegExp驗證

'-' -> NOT OK 
' ' -> NOT OK 
'--' -> OK 
'-prwe'-> OK 
'p u' -> OK 

我想這個正則表達式:[^([^-]|[^\s])] 但它給了我一個錯誤說「不平衡括號」 如果我只是用^([^-]|[^\s])的正則表達式是有效的,但這樣一來我不否定捕獲組,在這種情況下,^符號表示「字符串開始」。 我的想法在僞正則表達式是這樣的 - >NOT((NOT '-')|(NOT '\s'))

+3

'[]'是[字符類](http://www.regular-expressions.info/charclass.html),而不是組。 '[^ ..]'是否定字符類。你也不能在角色類中使用組。 – Pshemo

回答

2

@ aliteralmind的答案是很好的檢查,看看他們是否搞砸了。如果您想在同一步驟中進行額外的解析,則需要負向預測,例如^(?!(?:-|\s*)$).*

0

有很多方法可以做到這一點。

1).{2,}:任何字符不止一次

2)^[\-\s]$:它意味着空間或連字符。因此,檢查是否(!)在條件。

3)if string.equals("-") or string.equals(" ")。只有在考慮到這兩個字符!

4)想不到它,但很多可用的!

2

檢查這一點,並告訴他們搞砸了,如果它匹配的用戶:

^(-| +)$ 

或者,你可以檢查修剪字符串,如果它等於一個破折號:

if(input.trim().equals("-")) { 
    throw new IllegalArgumentException("Cannot be a single dash or only spaces"); 
} 
+1

但是我怎麼能否定上面的正則表達式「^( - | +)$」? – tt0686

+0

否定if:'if(Pattern.compile(「^( - | +)$」).matcher(input).matches()){throw error ...' – aliteralmind

+0

@ tt0686我們可以看看你是怎麼樣使用這個正則表達式?如果你想用'matches'來使用它,可以用它作爲'if(!yourString.matches(regex))'(注意''''在'matches'之前)。 – Pshemo