用于 Zip、电话、电子邮件和日期的 Java 正则表达式



我在 Java 中有四个正则表达式与 a 匹配:

Zip code : ([0-9]*)([0-9\-])([0-9]+)
telephone: ([0-9]+)([\-]?)([0-9]+)([\-]?)([0-9]+)
email    : ([a-z0-9_\.-]+)@([\da-z\.-]+)([\da-z]+)\.([a-z]+)
date     : ((19|20)\d\d)[/-](0?[1-9]|1[012])[/-](0?[1-9]|[12][0-9]|3[01])
and ((19|20)\d\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])

他们正在按我的预期工作。但是,如果我为整体应用最大长度和最小长度,它们将不再匹配。

例如:

zip  : ([0-9]*)([0-9\-])([0-9]+).{2,10}
email:  ([0-9]+)([\-]?)([0-9]+)([\-]?)([0-9]+).{64}

我想为所有这些正则表达式添加最小和最大长度。

使用前瞻锚定开始,例如

^(?=.{2,10}$)([0-9]*)([0-9\-])([0-9]+)

表达式 ^(?=.{2,10}$) 说"无论后面跟着什么其他正则表达式,整个输入都必须有 2-10 个字符长"

在不重写

几乎所有内容的情况下,将最大长度应用于这些正则表达式会有点困难。最好的办法可能是使用积极的展望:

zip : ^(?=.{2,10}$)([0-9]*)([0-9\-])([0-9]+)
      ^^^^^^^^^^^^^

这将确保 zip 在 2 到 10 个字符之间

email :  ^(?=.{64}$)([0-9]+)([\-]?)([0-9]+)([\-]?)([0-9]+)
         ^^^^^^^^^^^

这将确保电子邮件的长度为 64 个字符。更改为 1 到 64 个字符的^(?=.{1,64}$)

最新更新