我想通过正则表达式验证字符串。 验证是: 每个字符都有效,但字符串不能只包含连字符或只包含空格。 例如
'-' -> NOT OK
' ' -> NOT OK
'--' -> OK
'-prwe'-> OK
'p u' -> OK
我正在尝试这个正则表达式:[^([^-]|[^\s])]
但它给我一个错误说“不平衡的括号”
如果我只使用^([^-]|[^\s])
,则regexp是有效的,但这样我不会否定捕获组,在这种情况下,^
符号表示“字符串开始”。
我在伪正则表达式中的想法就是这个 - > NOT((NOT '-')|(NOT '\s'))
答案 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)无法想到它,但更多的可用!