【问题标题】:Regex for a five-digit numerical String五位数字字符串的正则表达式
【发布时间】:2015-05-19 09:25:18
【问题描述】:

我目前正在尝试为五位数字字符串设计一个正则表达式,该字符串将用于存储航班号。重要的是,这个数字正好是 5 个数字字符长。到目前为止,我已经想出了这个,但它似乎有点松弛:

@NotNull
@Size(min = 5, max = 6)
@Pattern(regexp = "[0-9]{5}", message = "Please use a number with five digits")
@Column(name = "flight_number")
private String flightNumber;

也就是说,当字符串必须只有 5 个字符长时,指定最小值和最大值之类的东西似乎有点过头了。任何人都可以建议对此进行改进吗?

【问题讨论】:

    标签: java regex annotations


    【解决方案1】:

    试试这个,应该可以的

    ^\d{5}$

    【讨论】:

    • 谢谢!你也知道[A-Z] 的类似简写吗? (即仅字母表中的字母,全部大写)
    • @Zetland [A-Z] 会的,如果答案解决了你的问题,请标记为答案,谢谢:)
    【解决方案2】:

    您使用的正则表达式:[0-9]{5} 非常接近您希望达到的效果。 问题是你只是说匹配 5 个数字

    您需要做的就是简单地添加^$ 锚点,以指示正则表达式引擎确保字符串完全由您想要的内容组成.因此,[0-9]{5} 变为 ^[0-9]{5}$^\d{5}$

    【讨论】:

    • 问题是:有必要吗?注释是通过使用matches() 的模式来工作,还是使用find()
    • @npinti 谢谢!我还需要@Size 代码吗?
    • @nhahtdh:我认为它使用find()。话虽如此,在任何一种情况下,它都不应该有所作为。我目前无法查看。
    • @Zetland:不,提供的表达式确保匹配的长度正好是 5 个字符。
    【解决方案3】:

    我个人觉得利用 Java 的内置数学逻辑会更舒服。所以我会做这样的事情:

    int flightNumber = ...; // your code assigns this
    if (flightNumber < 0 || flightNumber >= 100000) {
        logger.error("Bad input");
    }
    String flightNumberAsString = String.valueOf(flightNumber);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      相关资源
      最近更新 更多