我正在尝试为包含月数的字段构建一个正则表达式,当然,这需要只有数字 1-12。但是,对于正则表达式来说,这对我来说有点新,我只需要检查我是对的。它似乎工作正常。虽然,我假设这里的范围 1-12 允许此范围内的任何数字是否正确,但我只是问,因为我以前只见过 0-9 完成它。
[1-12]{1,2}
这可能会。两位数或一位数
1[0-2]|[1-9]
编辑:如果您担心像 55 这样的数字,请使用:
^(1[0-2]|[1-9])$
添加^
and$
表示字符串的开始和结束。使用https://regex101.com作为一个很好的学习工具。
不要只是一个正则表达式。只是不要。将字符串解析为int
,并检查该值是否在范围内。
boolean isMonthInRange(String monthInput)
{
try
{
int value = Integer.parseInt(monthInput, 10);
return value >= 1 && value <= 12;
}
catch (NumberFormatException e)
{
return false;
}
}
由于这是 Java,因此我们可以使用一大堆库来解决这个问题,而不是滚动自定义解决方案。至少,不要在条件中使用幻数(1
和12
)。
另一个建议:
\b(?:1[0-2]|[1-9])\b
如果您只允许完全匹配,则可能不需要检查单词边界 - 否则是正则表达式。在以前的答案中,例如 13 中的 1 和 3 将作为两个单独的匹配项进行匹配。
我认为这应该很好:(^[1-9]$)|(^0[1-9]|1[0-2]$)
您可以插入 1-12 以及 01、02 ...
/(1[0-2]|[1-9])/
尽管正如其他人所说,可能有更好的方法。仅检查该值在评估为整数时是否 < 1 或 > 12 也可以正常工作(并且对于不熟悉正则表达式的人来说更容易理解)。(编辑:就像 MДΓΓ БДLL 的回答一样。)
这是我要做的:
[1-9]|10|11|12
对于 HTML/JavaScript 解决方案,以下正则表达式可用于 HTML 输入模式属性,以强制执行 mm/dd/yyyy 格式,其中 mm 为 1-12,dd 为 1-31,yyyy 为 1930-1999。 ..
(?:1[0-2]|[1-9])\/(?:[1-9]|1[0-9]|2[0-9]|3[0-1])\/(19[3-9]{1}[0-9]{1})
...并且,连同一些提供视觉提示的 CSS,它可能会像这样使用:
input::placeholder {
color: rgb(46, 163, 242);
font-style: italic;
}
input:focus {
box-shadow: 2px 2px 2px 0px rgba(0, 0, 0, 0.4) inset;
}
input:required:invalid, input:focus:invalid {
border: 2px solid rgb(255, 159, 159) !important;
background: white;
}
input:required:valid {
background: rgba(196, 255, 214, .5) !important;
color: black !important;
}
section.form-layout input {
width: 120px;
height: 27px;
border: 2px solid rgb(46, 163, 242);
border-radius: 5px;
text-align: center;
color: rgb(46, 163, 242);
transition: all .5s ease;
}
*:focus {
outline: none;
}
<section class="form-layout">
<p>Enter your DOB <span style="font-style: italic;">(mm/dd/yyyy)</span>:</p>
<input required id="dob-1" placeholder="Date of Birth" type="text" pattern="(?:1[0-2]|[1-9])\/(?:[1-9]|1[0-9]|2[0-9]|3[0-1])\/(19[3-9]{1}[0-9]{1})" autocomplete="off">
</section>