Regex 如何表示正则表达式编号范围(例如1到12)?
我目前正在使用Regex 如何表示正则表达式编号范围(例如1到12)?,regex,coding-style,standards,Regex,Coding Style,Standards,我目前正在使用([1-9]| 1[0-2])来表示从1到12的输入。(不允许前导零。) 然而,它看起来相当粗糙,有时看起来非常脏 ☞ 是否有一种合适的内置方法来做这件事 ☞ 表示数字范围的其他方法有哪些? 您可以使用: [1-9]|1[012] 是的,正确的一个: [1-9]|1[0-2] 否则你就得不到10。我倾向于使用像[2-9]| 1[0-2]?这样的表单,它避免了回溯,尽管在这里没有什么区别。尽管正则表达式可以很好地处理这些问题,但我已经习惯于使用XML模式来避免这种“歧义”
([1-9]| 1[0-2])
来表示从1到12的输入。(不允许前导零。)
然而,它看起来相当粗糙,有时看起来非常脏
☞ 是否有一种合适的内置方法来做这件事
☞ 表示数字范围的其他方法有哪些?
您可以使用:
[1-9]|1[012]
是的,正确的一个:
[1-9]|1[0-2]
否则你就得不到10。我倾向于使用像
[2-9]| 1[0-2]?
这样的表单,它避免了回溯,尽管在这里没有什么区别。尽管正则表达式可以很好地处理这些问题,但我已经习惯于使用XML模式来避免这种“歧义”。这里是更好的答案,精确匹配范围为1-12
(^0?[1-9]$)|(^1[0-2]$)
以前的答案在HTML输入正则表达式验证中并不适用,有些值(如“1111”或“1212”)仍然将其视为有效输入。如何:
^[1-9]|10|11|12$
匹配0-9或10或11或12。就是这样,没有其他匹配项。在python中,这匹配1-12之间的任何数字:
12|11|10|9|8|7|6|5|4|3|2|1
降序顺序很重要。按照升序10,11和12将匹配1,因为正则表达式通常选择第一个匹配值,您可以尝试以下方法:
^[1-9]$|^[1][0-2]$
验证从1到12的数字的正确模式如下:
(^[1-9][0-2]$)|(^[1-9]$)
例如,当您有一个类型为number的输入并且需要验证month时,上面的表达式非常有用。这是因为输入类型number忽略任何数字前面的0,例如:01它返回1
你可以在这里看到它的作用:
如果您需要验证字符串数字,我的意思是,当您使用带有文本类型的输入,但您需要数字,例如:到期卡月份或月份时,以下表达式可能对您有用:
(^0[1-9]$)|(^1[0-2]$)
你可以在这里看到它的作用
我希望这会有很大帮助,因为这很棘手
关于。使用以下模式
(0?[1-9]| 1[0-2])
使用此模式,它将返回从1到12(1月至12月)的值,即使它最初以0(01,02,03,…,09,10,11,12)如果“越大越好”,那么(1 | 2 | 3 | 4 | 5 | 6 | 7 1249 | 10 | 11)更好。您需要用锚将表达式包装起来,否则您将匹配错误值的前几位,如1234
。类似这样的:^([1-9]|1[0-2])$
或者可能:\b([1-9]|1[0-2])\b
会更好。基本上,当匹配者看到一个“1”字符时,“含义”是不明确的,直到看到更多字符为止。是[1-9]的“1”还是[0-2]的“1”?Regex并不关心意义,但有时它仍然是一个效率问题,因为匹配器必须保持两个分支都处于活动状态,直到歧义得到解决。因此,在Regex机器看来,这是最快的解决方案:1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12?不,我不是在比较[2-9]
使用2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
——不知道哪个更快。我将1 | 10
与10?
进行比较。这并不是说它对这样一个微不足道的例子很重要,而是对于更复杂的正则表达式,它将有助于删除分支的公共前缀。也许是一个更好的例子:ab | ac
改进为a(b | c)
。在我的例子中,10以下的数字应该有一个前导零,所以我将模式更改为0[1-9]| 1[0-2]?