使用RegEx验证

时间:2014-02-27 18:02:38

标签: java regex

我想通过正则表达式验证字符串。 验证是: 每个字符都有效,但字符串不能只包含连字符或只包含空格。 例如

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

我正在尝试这个正则表达式:[^([^-]|[^\s])] 但它给我一个错误说“不平衡的括号” 如果我只使用^([^-]|[^\s]),则regexp是有效的,但这样我不会否定捕获组,在这种情况下,^符号表示“字符串开始”。 我在伪正则表达式中的想法就是这个 - > NOT((NOT '-')|(NOT '\s'))

3 个答案:

答案 0 :(得分:2)

检查一下,如果匹配则告诉用户他们搞砸了:

^(-| +)$

或者你可以查看 trimmed 字符串,如果它等于一个破折号:

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

答案 1 :(得分:2)

@ aliteralmind的答案非常适合检查他们是否搞砸了。如果你想在同一步骤中进行额外的解析,你需要消极的前瞻,例如^(?!(?:-|\s*)$).*

答案 2 :(得分:0)

有很多方法可以做到这一点。

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

2)^[\-\s]$:它表示空格或连字符。因此,请在if条件中检查不是{!

3)如果string.equals("-")string.equals(" ")。只考虑这两个字符!

4)无法想到它,但更多的可用!