【问题标题】:Validate with RegExp使用 RegExp 进行验证
【发布时间】:2014-02-27 18:02:37
【问题描述】:

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

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

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

【问题讨论】:

  • []character class,而不是组。 [^..] 是字符类的否定。你也不能在字符类中使用组。

标签: java regex


【解决方案1】:

@alliteralmind 的回答非常适合检查他们是否搞砸了。如果您想在同一步骤中进行其他解析,则需要负前瞻,例如^(?!(?:-|\s*)$).*.

【讨论】:

    【解决方案2】:

    检查这个,如果匹配就告诉用户他们搞砸了:

    ^(-| +)$
    

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

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

    【讨论】:

    • 但是如何否定上面的正则表达式 "^(-| +)$" 呢?
    • 用 if 否定它:if(Pattern.compile("^(-| +)$").matcher(input).matches()) { throw error...
    • @tto686:老实说,我建议使用非正则表达式检查。它更清晰,更简洁。
    • 您的问题已标记为 Java。那么Java是如何成为“另一种语言”的呢?如果您在 Java 的上下文中使用它,为什么您 必须 在正则表达式中否定它?否定这个正则表达式比较复杂,那么为什么使用Java?
    • 很抱歉没有接受的答案,但我必须接受解决问题的答案,可能我在提出问题时并不完全清楚,但在问题的开头我明确写了“我想验证通过正则表达式的字符串。”。无论如何,我非常感谢所有答案和您的可用性。
    【解决方案3】:

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

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

    2) ^[\-\s]$ :表示空格或连字符。所以在 if 条件下检查 not(!)。

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-26
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 2013-01-13
      • 2016-09-09
      • 1970-01-01
      相关资源
      最近更新 更多