【问题标题】:Regex not required [duplicate]不需要正则表达式[重复]
【发布时间】:2020-01-23 09:46:24
【问题描述】:

我正在尝试用类似的模式在 Java 中开发一个简单的正则表达式:

@Pattern(regexp = "[a-zA-Z]{2}[0-9]{1}[2-8]{1}" , message = "The format is invalid")

但当字段为空时,仍会显示此消息, 所以我只想在字段不为空时显示此消息(我希望该字段不是必需的)。

谢谢。

【问题讨论】:

  • 请发布有效的 Java 代码。您发布的内容无法编译。
  • 你的意思是空的还是那个模式通过使其可选? ^(?:[a-zA-Z]{2}[0-9][2-8])?$regex101.com/r/pKrWA1/1
  • 嗨。您包含的 sn-p 中有语法错误。此外,您似乎正在使用某种魔术框架。至少在某处提及它的名称(或 @Pattern 注释的完整路径,带有包名称)。这个问题有太多遗漏了。
  • (OT:{1} 是多余的。)
  • 只是好奇,你想和[0-9]{1}[2-8]{1}匹配什么?

标签: java regex


【解决方案1】:

尝试使用以下正则表达式,它匹配您预期的字符串空字符串:

[a-zA-Z]{2}[0-9]{1}[2-8]{1}|^$

Java 代码:

@Pattern(regexp = "[a-zA-Z]{2}[0-9]{1}[2-8]{1}|^$", message = "The format is invalid")

【讨论】:

    【解决方案2】:

    您可以使用非捕获组 (?:...)? 将整个模式设为可选,以匹配空字符串或整个模式。

    请注意,您可以省略 {1} 部分。

    ^(?:[a-zA-Z]{2}[0-9][2-8])?$
    

    Regex demo

    @Pattern(regexp = "^(?:[a-zA-Z]{2}[0-9][2-8])?$" , message = "The format is invalid")
    

    【讨论】:

      猜你喜欢
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 2011-11-22
      • 2014-02-16
      • 2014-10-17
      相关资源
      最近更新 更多