Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何表示正则表达式编号范围(例如1到12)?_Regex_Coding Style_Standards - Fatal编程技术网

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
降序顺序很重要。按照升序101112将匹配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])
使用此模式,它将返回从112(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]?