普通的前pression帮助:24小时添加到前pression [英] Regular expression help: add 24-hour to expression

查看:138
本文介绍了普通的前pression帮助:24小时添加到前pression的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个正规的前pression,我需要24小时的时间格式添加到:

<$p$p><$c$c>^(((((0[13578])|([13578])|(1[02]))[\\-\\/\\s]?((0[1-9])|([1-9])|([1-2][0-9])|(3[01])))|((([469])|(11))[\\-\\/\\s]?((0[1-9])|([1-9])|([1-2][0-9])|(30)))|((02|2)[\\-\\/\\s]?((0[1-9])|([1-9])|([1-2][0-9]))))[\\-\\/\\s]?\\d{4})(\\s(((0[1-9])|([1-9])|(1[0-2]))\\:([0-5][0-9])((\\s)|(\\:([0-5][0-9])\\s))([AM|PM|am|pm]{2,2})))?$

我怎么会去增加24小时时间格式。


解决方案

TLDR:不要再用与正则表达式做



时间部分:

  /(:[01] \\ D | 2 [0-3]):[0-5] \\ D /

在日期部分的一个基本的尝试:

  /(?:0 [1-9] | 1 [0-2])\\ /(?:0 [1-9] | [12] \\ D | 3 [ 01])\\ / \\ D {4} /

在日期部分更高级的尝试(验证正确,除了2月):

<$p$p><$c$c>/(?:(?:0[13578]|1[02])\\/(?:0[1-9]|[12]\\d|3[01])|(?:0[2469]|11)\\/(?:0[1-9]|[12]\\d|30))\\/\\d{4,}/

进一步说,每年的假设是一个飞跃之一:

<$p$p><$c$c>/(?:(?:0[13578]|1[02])\\/(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)\\/(?:0[1-9]|[12]\\d|30)|02\\/(?:0[1-9]|[12]\\d))\\/\\d{4,}/

由整除的 4 的:

  / \\ D *(?:[13579] [26] | [02468] [048])(?!\\ D)/

不整除的 100 的或整除的 400 的:

  / \\ D *((\\ d {2} 00)|(=(?:?!?[13579] [26] | [02468] [048]) 00))\\ D {4}(?!\\ D)/

是闰年:

<$p$p><$c$c>/\\d*(?:(?:(?!\\d{2}00)(?=\\d{2}(?:[13579][26]|[02468][048])))|(?=(?:[13579][26]|[02468][048])00))\\d{4}(?!\\d)/

只有有效日期日:

<$p$p><$c$c>/02\\/(?:0[1-9]|1\\d|2[0-8]|29(?=\\/\\d*(?:(?:(?!\\d{2}00)(?=\\d{2}(?:[13579][26]|[02468][048])))|(?=(?:[13579][26]|[02468][048])00))\\d{4}(?!\\d)))\\/\\d{4,}/

一个有效日期:

<$p$p><$c$c>/(?:(?:0[13578]|1[02])\\/(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)\\/(?:0[1-9]|[12]\\d|30)|02\\/(?:0[1-9]|1\\d|2[0-8]|29(?=\\/\\d*(?:(?:(?!\\d{2}00)(?=\\d{2}(?:[13579][26]|[02468][048])))|(?=(?:[13579][26]|[02468][048])00))\\d{4}(?!\\d))))\\/\\d{4,}/



现在一切都在一个地方!

日期和时间:

<$p$p><$c$c>/^(?:(?:0[13578]|1[02])\\/(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)\\/(?:0[1-9]|[12]\\d|30)|02\\/(?:0[1-9]|1\\d|2[0-8]|29(?=\\/\\d*(?:(?:(?!\\d{2}00)(?=\\d{2}(?:[13579][26]|[02468][048])))|(?=(?:[13579][26]|[02468][048])00))\\d{4}(?!\\d))))\\/\\d{4,} (:[01] \\ D | 2 [0-3]):[0-5] \\ D $ /



可以这样简单?最绝的!

我会做吗?该死的!

我觉得信息是明确的! - 不这样做

I have a regular expression that I need to add 24-hour time format to:

^(((((0[13578])|([13578])|(1[02]))[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9])|(3[01])))|((([469])|(11))[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9])|(30)))|((02|2)[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9]))))[\-\/\s]?\d{4})(\s(((0[1-9])|([1-9])|(1[0-2]))\:([0-5][0-9])((\s)|(\:([0-5][0-9])\s))([AM|PM|am|pm]{2,2})))?$

How would I go about adding 24 hour time format.

解决方案

TLDR: Don't freaking do it with regex!


The time part:

/(?:[01]\d|2[0-3]):[0-5]\d/

A basic attempt at the date part:

/(?:0[1-9]|1[0-2])\/(?:0[1-9]|[12]\d|3[01])\/\d{4,}/

A more advanced attempt at the date part (validates correctly, except for February):

/(?:(?:0[13578]|1[02])\/(?:0[1-9]|[12]\d|3[01])|(?:0[2469]|11)\/(?:0[1-9]|[12]\d|30))\/\d{4,}/

Going further, assuming each year is a leap one:

/(?:(?:0[13578]|1[02])\/(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)\/(?:0[1-9]|[12]\d|30)|02\/(?:0[1-9]|[12]\d))\/\d{4,}/

Divisibility by 4:

/\d*(?:[13579][26]|[02468][048])(?!\d)/

Not divisible by 100 or divisible by 400:

/\d*(?:(?!\d{2}00)|(?=(?:[13579][26]|[02468][048])00))\d{4}(?!\d)/

Is leap year:

/\d*(?:(?:(?!\d{2}00)(?=\d{2}(?:[13579][26]|[02468][048])))|(?=(?:[13579][26]|[02468][048])00))\d{4}(?!\d)/

Only valid February dates:

/02\/(?:0[1-9]|1\d|2[0-8]|29(?=\/\d*(?:(?:(?!\d{2}00)(?=\d{2}(?:[13579][26]|[02468][048])))|(?=(?:[13579][26]|[02468][048])00))\d{4}(?!\d)))\/\d{4,}/

A valid date:

/(?:(?:0[13578]|1[02])\/(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)\/(?:0[1-9]|[12]\d|30)|02\/(?:0[1-9]|1\d|2[0-8]|29(?=\/\d*(?:(?:(?!\d{2}00)(?=\d{2}(?:[13579][26]|[02468][048])))|(?=(?:[13579][26]|[02468][048])00))\d{4}(?!\d))))\/\d{4,}/


Now everything in one place!

Date and time:

/^(?:(?:0[13578]|1[02])\/(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)\/(?:0[1-9]|[12]\d|30)|02\/(?:0[1-9]|1\d|2[0-8]|29(?=\/\d*(?:(?:(?!\d{2}00)(?=\d{2}(?:[13579][26]|[02468][048])))|(?=(?:[13579][26]|[02468][048])00))\d{4}(?!\d))))\/\d{4,} (?:[01]\d|2[0-3]):[0-5]\d$/


Can this be simplified? Most definitely!

Will I do it? Hell no!

I think the message is clear - don't do it!

这篇关于普通的前pression帮助:24小时添加到前pression的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆