Javascript 是否使用正则表达式检查有效的日期组合?
用户可以在输入中输入几个有效的日期组合: 示例:(所有组合都允许3!=6) 所有日期均为有效日期 我还创建了一个正则表达式,用于检查:Javascript 是否使用正则表达式检查有效的日期组合?,javascript,regex,Javascript,Regex,用户可以在输入中输入几个有效的日期组合: 示例:(所有组合都允许3!=6) 所有日期均为有效日期 我还创建了一个正则表达式,用于检查: /^(?=.*\b(一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)(?=.*2] \d{3}\b))(?=.*\b(0[1-9]|[12]\d|3[01])\b)。*$/i 这意味着: (?=..*\b(1月| 2月| 3月| 4月| 5月| 6月| 7月| 8月| 9月| 10月| 11月| 12月):我期待未来会有这样的一个
/^(?=.*\b(一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)(?=.*2] \d{3}\b))(?=.*\b(0[1-9]|[12]\d|3[01])\b)。*$/i
这意味着:
:我期待未来会有这样的一个值(?=..*\b(1月| 2月| 3月| 4月| 5月| 6月| 7月| 8月| 9月| 10月| 11月| 12月)
:我预期的年份:1xx或2xxx(?=.*)(\b[12] \d{3}\b))
我期待的日子:0x或1x或2x或3x(?=..*\b(0[1-9]|[12]\d|3[01])\b)
2012年2月13日4
也将通过
Console :
/^(?=.*\b(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\b)(?=.*(\b[12]\d{3}\b))(?=.*\b(0[1-9]|[12]\d|3[01])\b).*$/i.test('feb 13 2012 4') //true
问题:
如何增强我的正则表达式以找到严格匹配
p、 美国。
检查新日期(xxx)也是一个解决方案,但我正在寻找正则表达式解决方案。(以提高我的正则表达式技能)。为每种格式编写一个正则表达式:
- RE1-识别
=MON DD YYYY
(?:一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)s+(?:0?[1-9]|[12]\d | 3[01])\s+[12]\d{3}
- RE2-识别
=DD MON yyyyy
(?:0?[1-9]|[12]\d | 3[01])\s+(?:一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月|)s+[12]\d{3}
- RE3-识别
=YYYY-DD-MON
[12]\d{3}\s+(?:0?[1-9]|[12]\d|3[01])\s+(?:一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)
/^(?:RE1|RE2|RE3)$/i
为每种格式编写一个regexp:
- RE1-识别
=MON DD YYYY
(?:一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)s+(?:0?[1-9]|[12]\d | 3[01])\s+[12]\d{3}
- RE2-识别
=DD MON yyyyy
(?:0?[1-9]|[12]\d | 3[01])\s+(?:一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月|)s+[12]\d{3}
- RE3-识别
=YYYY-DD-MON
[12]\d{3}\s+(?:0?[1-9]|[12]\d|3[01])\s+(?:一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)
/^(?:RE1|RE2|RE3)$/i
在开始处创建一个前瞻
(?=…)
组,然后为月份块之前或之后的数字创建可选组。下面的正则表达式适用于所有示例(请参见链接页面上的单元测试)编辑:它现在匹配所有3个=6允许的组合,但不允许出现不允许的组合,如2 1978年2月4
/^(?=[a-z]{3}\s(\d{1,2}\s\d{4}|\d{4}\s\d{1,2})$|\d{1,2}\s[a-z]{3}\s\d{4}$|\d{4}\s[a-z]{3}\s\d{1,2}$|(\d{1,2}\s\d{4}|\d{4}\s\d{1,2})\s[a-z]{3}$)([12]\d{3}\s|\d{1,2}\s){0,2}(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(\s\d{1,2}|\s[12]\d{3}){0,2}$/i
说明:
- 整个表达式必须类似于以下表达式之一:
- 三个
之后是一天,然后是一年[a-z]
- 三个
之后是一年,然后是一天[a-z]
- 一天,三天,一年
- 一年,三年,一天
- 一天,一年,然后是三天
- 一年,一天,然后是三年
- 三个
- (可选)匹配一个或两个数字组
- 匹配三个字母的月份代码
- (可选)匹配一个或两个数字组
(?=…)
组,然后在月份块之前或之后为数字创建可选组。下面的正则表达式适用于所有示例(请参见链接页面上的单元测试)编辑:它现在匹配所有3个=6允许的组合,但不允许出现不允许的组合,如2 1978年2月4
/^(?=[a-z]{3}\s(\d{1,2}\s\d{4}|\d{4}\s\d{1,2})$|\d{1,2}\s[a-z]{3}\s\d{4}$|\d{4}\s[a-z]{3}\s\d{1,2}$|(\d{1,2}\s\d{4}|\d{4}\s\d{1,2})\s[a-z]{3}$)([12]\d{3}\s|\d{1,2}\s){0,2}(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(\s\d{1,2}|\s[12]\d{3}){0,2}$/i
说明:
- 整个表达式必须类似于以下表达式之一:
- 三个
之后是一天,然后是一年[a-z]
- 三个
之后是一年,然后是一天[a-z]
- 一天,三天,一年
- 一年,三年,一天
- 一天,一年,然后是三天
- 一年,一天,然后是三年
- 三个
- (可选)匹配一个或两个数字组
- 匹配三个字母的月份代码
- (可选)匹配一个或两个数字组
/^(?=.*\b(一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|)十二月)(?=.*2] \d{3}\b](?=.*\b(0[1-9]|[12]\d|3[01])\b.*$/i.test('feb 13 2012 4')
而不是试图将所有不同的格式混合到一个regexp中,为每种格式制作一个单独的regexp,然后交替组合。@Barmar要求一个示例会不会很粗鲁?:-)在$
之前最后一个*
在那里做什么?我希望这就是让尾随内容通过的原因,但我无法让表达式在没有它的情况下通过任何内容。您使用什么代码来执行表达式匹配?@norlesh仅使用控制台:/^(?=.*\b(一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|)\b)(?=.*2] \d{3}\b](?=.*\b(0[1-9]|[12]\d|3[01])\b.*$/i.test('feb 13 2012 4')
而不是试图将所有不同的格式混合到一个regexp中,为每种格式制作一个单独的regexp,然后交替组合。@Barmar要求一个示例会不会很粗鲁?:-)在$
之前最后一个*
在那里做什么?我想这就是让尾随的东西通过的原因,但是如果没有它,我无法得到表达式让任何东西通过,除非你想允许每一个排列。我的解决方案只允许您列出的3种排列,例如,它不允许MON-YYYY-DD
。仅当您希望允许每种排列时。我的解决方案只允许您列出的3种排列,例如,它不允许MON-YYYY-DD
。您的解决方案还匹配2 1978-feb-3
@sp00m-Oops;忘记粘贴