Java - 正则表达式 - 需要1-12个月

时间:2012-04-21 15:08:39

标签: java regex

我正在尝试为包含月数的字段构建正则表达式,当然,这只需要数字1-12。然而,对正则表达式来说,这对我来说有点新鲜,我只需要检查一下我是对的。它似乎工作正常。虽然我在假设这里的范围是正确的1-12允许这个范围内的任何数字,但我只是问,因为我以前只看到它用0-9完成。

[1-12]{1,2}

8 个答案:

答案 0 :(得分:14)

这可能会。两位数或一位数

1[0-2]|[1-9]

编辑:如果你担心像55这样的数字,请使用:

^(1[0-2]|[1-9])$

添加^$表示字符串的开头和结尾。使用https://regex101.com作为一种很好的学习工具。

答案 1 :(得分:8)

不要只是一个正则表达式。只是不要。 Parse the string to an int,并检查该值是否在范围内。

boolean isMonthInRange(String monthInput)
{
    try
    {
        int value = Integer.parseInt(monthInput, 10);
        return value >= 1 && value <= 12;
    }
    catch (NumberFormatException e)
    {
        return false;
    }
}

由于这是Java,我们可以在这个问题上抛出一大堆库而不是滚动自定义解决方案。至少,不要在条件中使用幻数(112)。

答案 2 :(得分:4)

另一个建议:

\b(?:1[0-2]|[1-9])\b

如果只允许完全匹配,则可能不需要检查单词边界 - 否则可能是正则表达式。以前的答案会匹配,例如1和3在13中作为两个单独的比赛。

答案 3 :(得分:2)

我认为这应该没问题:(^[1-9]$)|(^0[1-9]|1[0-2]$)

你可以插入1-12和01,02 ......

答案 4 :(得分:1)

/(1[0-2]|[1-9])/

虽然正如其他人所说,但可能有更好的方法。只是检查当被评估为整数时该值是否为&lt; 1或&gt; 12也可以工作(对于那些不熟悉正则表达式的人来说更容易理解)。 (编辑:像MДΓΓБДLL的回答一样。)

答案 5 :(得分:0)

这就是我要做的事情:

[1-9]|10|11|12

答案 6 :(得分:0)

用于 1-12 (或) 01-12

(1[0-2]|0[1-9]|[1-9])

答案 7 :(得分:0)

对于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>