我在 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}$)
。