如何表示正则表达式编号范围(例如1到12)?

时间:2011-08-18 09:23:20

标签: regex coding-style standards

我目前正在使用([1-9]|1[0-2])来表示1到12之间的输入。(不允许前导零。)

然而,似乎相当 hacky ,并且在某些日子看起来彻底肮脏

☞是否有正确的内置方式?

☞有哪些其他方式来表示数字范围?

9 个答案:

答案 0 :(得分:8)

是的,正确的:

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

否则你不会得到10。

答案 1 :(得分:6)

您可以使用:

[1-9]|1[012]

答案 2 :(得分:6)

我倾向于使用像[2-9]|1[0-2]?这样的形式来避免回溯,尽管这里没什么区别。虽然正则表达式可以很好地处理它们,但我已经受到XML Schema的限制,以避免出现这种“歧义”。

答案 3 :(得分:2)

您可以尝试以下方法:

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

答案 4 :(得分:1)

这是更好的答案,精确匹配范围为1-12。

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

以前的答案在HTML输入正则表达式验证中并不能很好地工作,在某些情况下,如“ 1111”或“ 1212”之类的值仍会将其视为有效输入。

答案 5 :(得分:1)

使用以下模式 (0?[1-9]|1[0-2]) 使用它会返回从 112一月到十二月)的值,即使它最初以 0 开头(01, 02, 03, ..., 09, 10, 11, 12

答案 6 :(得分:0)

怎么样:

^[1-9]|10|11|12$

匹配0-9或10或11或12。就这样,没有其他匹配项。

答案 7 :(得分:0)

验证数字1到12的正确方法如下:

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

例如,当您具有类型编号的输入并且需要验证月份时,上述表达式很有用。这是因为输入类型数字会忽略任何数字前面的0,例如:01返回1。

您可以在此处查看它的运行情况:https://regexr.com/5hk0s

如果您需要验证字符串数字,我的意思是,当您使用文本类型的输入但您希望输入数字时,例如:到期卡月份或月份,以下表达式可能对您有用:

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

您可以在此处https://regexr.com/5hkae

看到它的运行情况

我希望这会有所帮助,因为它非常棘手。

致谢。

答案 8 :(得分:-1)

python 中,该值与 1-12 之间的任何数字匹配:

12|11|10|9|8|7|6|5|4|3|2|1

降序重要。按照升序 10 11 12 会匹配 1 ,因为正则表达式通常会选择第一个匹配项值