2014-02-27 59 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