【问题标题】:Regular Expression does not accept correct inputs正则表达式不接受正确的输入
【发布时间】:2015-07-14 21:34:22
【问题描述】:

我正在开发一种 Java 方法,用于检查用户输入是否有效。为此,我编写了四个正则表达式来检查。前三个工作正常。最后一个,“最复杂”的正则表达式,不接受值,应该接受。

我想确保用户输入了三种不同的输入设置之一。

  • 一到六个“L”后跟一个 1-16 的数字
  • 一到六个“R”后跟一个 1-16 的数字
  • 一个 B 后跟一个 1-16 的数字

我的问题是定义,只接受 1-16 的数字。我的正则表达式接受 1-9,但不接受 9 以上的任何数字。

我们以“B”为例,这就是我的正则表达式:

 String regexB = "B[([1-9]{1})((1[0-6]){1})]";

我试图用我的表情做什么: 一个“B”,后跟一个 1-9 的单个数字或一个“1”和第二个 0-6 的单个数字。

我知道,这可能不是一个很难的问题,但也许你们中的一个人可以通过尝试解决这个问题来避免我浪费一些时间。

谢谢你的期待。

【问题讨论】:

    标签: java regex error-handling expression user-input


    【解决方案1】:
    String regexB = "B([1][0-6]|[1-9])";
    
    • 一个数字 1 和 0-6 OR
    • 1 到 9 之间的数字

    【讨论】:

    • 很好,这很好用!我不知道,那个“|”可以使用运算符,因为在我经历的文档/教程中没有提到它(来自 oracle)。
    • @KJaeg regular-expressions.info 很好地解释了正则表达式。
    • @sp00m 谢谢。我对正则表达式有一些了解。但是由于我几年没有使用,我只是忘记了语法和运算符。所以我浏览了一个非常基础的 Oracle 教程。由于您的链接提供了许多更详细的信息,我会记住这一点。
    【解决方案2】:

    我认为您的正则表达式无效。 尝试以下(以 B 为例)

    B((1{1}[0-6]{1})|([1-9]{1}))
    

    【讨论】:

    • 是的,@griFlo 是对的。我的正则表达式最重要的用途是捕获小于 1 和大于 16 的任何数字。
    • 我编辑了正则表达式,现在可能没问题。抱歉之前有错误的建议:)
    【解决方案3】:
    String regexB = "B([1-9]|([1][0-6]))";
    

    编辑:哦...答案已经存在...

    【讨论】:

      【解决方案4】:

      这是一个可以帮助您的工具:http://utilitymill.com/utility/Regex_For_Range

      在你的情况下:[1-9]|1[0-6]

      【讨论】:

      • 谢谢,不知道utilitymill,会记住这一点!
      猜你喜欢
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多