我正在尝试为包含月数的字段构建正则表达式,当然,这只需要数字1-12.然而,对正则表达式来说,这对我来说有点新鲜,我只需要检查一下我是对的.它似乎工作正常.虽然我在假设这里的范围是正确的1-12允许这个范围内的任何数字,但我只是问,因为我以前只见过0-9.
[1-12]{1,2}
Run Code Online (Sandbox Code Playgroud)
Mur*_*ski 16
这可能会.两位数或一位数
1[0-2]|[1-9]
Run Code Online (Sandbox Code Playgroud)
编辑:如果您担心像55这样的数字使用此:
^(1[0-2]|[1-9])$
Run Code Online (Sandbox Code Playgroud)
添加^和$表示字符串的开始和结束.使用https://regex101.com作为一个很好的学习工具.
不要只是一个正则表达式.只是不要.将字符串解析为aint,并检查该值是否在范围内.
boolean isMonthInRange(String monthInput)
{
try
{
int value = Integer.parseInt(monthInput, 10);
return value >= 1 && value <= 12;
}
catch (NumberFormatException e)
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
由于这是Java,我们可以在这个问题上抛出一大堆库而不是滚动自定义解决方案.至少,不要在条件中使用幻数(1和12).
另一个建议:
\b(?:1[0-2]|[1-9])\b
Run Code Online (Sandbox Code Playgroud)
如果您只允许完全匹配,则可能不需要检查单词边界 - 但否则需要检查正则表达式。在以前的答案中将匹配例如 13 中的 1 和 3 作为两个单独的匹配项。