我试图运行一个文本框,将格式mm/dd格式输入运行正则表达式验证。我对结构部分有足够的帮助,例如^\d{2}/\d{2}?
,但有没有办法限制最大值和最小值,如^\d{2}(sth that requires this to be between 0 and 12)/\d{2}(sth that requires this to be between 1 and 31)?
。正则表达式限制数字的上限和下限
回答
这不是要用正则表达式来完成!
但是,我做到了,因为我可以。
这里是一个解决方案:
/^(?!0?2\/3[01])(?!(?:0?[469]|11)\/31)(?:\d|1[012])\/(?:[1-9]|[12]\d|3[01])$/
你应该NEVER使用正则表达式这个!
据我所知,格式是mm/dd
(月/天)。
天数在1-31之间,月份从0-12(OP的要求)。
这只是评估。
使用负向预览,我可以确保(可能)有效的日期。
但严重:孩子们,不要在家里试试!
编辑:
如要求通过在赞扬OP,在这里我将解释如何工作的:
右一开始我们有^
字符。
这将字符串锚定在开头,而不是从字符串中间开始匹配。
以(?!)
开头的所有组都是负向预测。
这是什么做的是,它会采取偷看提前检查,如果有什么在前面不匹配的模式。
使用(?!0?2\/3[01])
将确保2/30
或2/31
不是匹配。
与(?!(?:0?[469]|11)\/31)
类似,其确保使用4/31
,6/31
,9/31
和11/31
。
使用第一个示例((?!0?2\/3[01])
),有0?
。
这意味着最多有一个0
。
仍然在同一个例子中,你会看到3[01]
。
使用[]
可确定一组可匹配的字符,在本例中为字符0
和1
。
使用第二个示例((?!(?:0?[469]|11)\/31)
),您可以使用组(?:0?[469]|11)
。
像(?:)
这样的组都是非捕获组。
这意味着他们会匹配但不会保存比赛。
这对于我们与|
一起使用的决策很有用,它用于匹配之前或之后的模式。
实际上,它的工作原理与or
操作符相似。
到目前为止,我们只检查字符串是否不是这些无效日期之一。
现在,我们将使用(?:\d|1[012])\/(?:[1-9]|[12]\d|3[01])$
验证日期格式。
这些零件可确保格式正确且在限制范围内。
的(?:\d|1[012])
位匹配任何数目从0
到9
(该\d
,这是相同的[0-9]
)或匹配10
,11
12
或。
类似地,(?:[1-9]|[12]\d|3[01])
匹配从1
到9
;或1
或2
后跟从0
到9
(实质上,10
到29
)的数字;或30
或31
。
要结束,我们有$
字符。
与^
相反,它将锚定到字符串的末尾。
没有这个,2/29 i like cookies
会匹配。
没有^
,On 3/20, we will meet here
也将被匹配。
我不是世界上最好的老师,我也不是最擅长解释的。
如果你练习,你会看到这开始有意义。
任何关于这个问题的问题,我可以自由回答。
对downvoter:我正在修复它!它正在工作! – 2014-12-04 18:38:39
@HakuKalay至少告诉我这是否符合您的需求,请 – 2014-12-04 18:51:33
接受此为答案。主要是为了清楚地说明我所要求的是不是要用RegEx来完成。如果我知道我不会花一个半小时寻找可能的答案。谢谢。 – NoSaidTheCompiler 2014-12-04 18:57:13
- 1. 正则表达式,字符数限制
- 2. 正则表达式来限制数字
- 3. ASP.NET正则表达式,限制数字
- 4. 正则表达式字符数限制
- 5. 限制正则表达式字边界
- 6. 正则表达式来限制字符
- 7. 限制在正则表达式表达
- 8. 正则表达式 - 长度限制和字母数字
- 9. 正则表达式上的keydown仅限制数字
- 10. 限制_末的正则表达式
- 11. 限制复杂的正则表达式
- 12. 对nginx正则表达式的限制?
- 13. 将数字限制在上限/下限?
- 14. 正则表达式限制零
- 15. 正则表达式与限制
- 16. 正则表达式与长度限制
- 17. 限制正则表达式匹配
- 18. Python正则表达式 - 限制结果?
- 19. 正则表达式 - 限制字符串中的字符数量
- 20. 限制数字字符的正则表达式是什么?
- 21. 用于匹配和限制字符类的正则表达式
- 22. 正则表达式限制数字字符串
- 23. 正则表达式以限制重复的数字
- 24. 正则表达式的字符数限制
- 25. 将字符数限制为5000的正则表达式
- 26. 正则表达式问题 - 字符限制和空白忽略
- 27. 正则表达式:限制整个匹配和字符类别
- 28. 正则表达式限制特殊字符,只允许DOT和&
- 29. 限制数字在下限和上限/限制之间的最佳方法
- 30. 正则表达式 - 数字,字符和空格仅限
这实际上是试图在一个方孔中装上一个圆钉。 – 2014-12-04 18:32:39
正则表达式不能以你想要的方式验证数字 – Dalorzo 2014-12-04 18:32:57
即使正则表达式是可能的,但它会允许'02/30'或'09/31'等 – anubhava 2014-12-04 18:33:55