用于匹配HH:MM时间格式的正则表达式

时间:2011-09-24 03:14:44

标签: regex

我想要一个正则表达式来匹配HH:MM格式的时间。这就是我所拥有的,它的确有效:

^[0-2][0-3]:[0-5][0-9]$

这匹配从00:00到23:59的所有内容。

但是,我想改变它,所以0:00和1:00等也匹配以及00:00和01:30。即,使最左边的数字可选,以匹配HH:MM以及H:MM。

任何想法如何改变?我需要这个工作在JavaScript和PHP。

19 个答案:

答案 0 :(得分:300)

您的原始正则表达式存在缺陷:例如,它与04:00不匹配。

这可能会更好:

^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$

答案 1 :(得分:44)

以上都不适合我。 最后我用了:

^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$ (js engine)

<强>逻辑:

第一个数字(小时)是:  0到19之间的数字 - &gt; [0-1]?[0-9](允许一位数字)
 或
 数字在20-23之间。 2[0-3]

第二个数字(分钟)始终是介于00和59之间的数字 - &gt; [0-5][0-9](不允许一位数字)

答案 2 :(得分:22)

时间的正则表达式

  • HH:MM 12小时格式,可选前导0

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
    
  • HH:MM 12小时格式,可选的前导0,强制性子句(AM / PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
    
  • HH:MM 24小时,前导0

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
    
  • HH:MM 24小时格式,可选前导0

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
    
  • HH:MM:SS 24小时格式,前导0

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

Reference and Demo

答案 3 :(得分:6)

你可以使用这个24H,秒是可选的

^([0-1]?[0-9]|[2][0-3]):([0-5][0-9])(:[0-5][0-9])?$

答案 4 :(得分:4)

最好的是HH:MM,不会冒任何风险。

^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$

答案 5 :(得分:2)

您可以使用此正则表达式:

^(2[0-3]|[01]?[0-9]):([1-5]{1}[0-9])$

如果要排除00:00,可以使用此表达式

^(2[0-3]|[01]?[0-9]):(0[1-9]{1}|[1-5]{1}[0-9])$

第二个表达式是更好的选项,因为有效时间是00:01到00:59或0:01到23:59。您可以根据您的要求使用其中任何一种。 Regex101 link

答案 6 :(得分:2)

令人惊讶的是我发现实际上所有这些并不完全覆盖它,因为它们不适用于0:0的较短格式午夜,而且有些也不适用于00:00,我使用并测试了以下内容:

^([0-9]|0[0-9]|1?[0-9]|2[0-3]):[0-5]?[0-9]$

答案 7 :(得分:1)

匹配

2:9
2:09
2:59
02:9
02:09
02:59
23:59

使用它:

^([0-9]|0[0-9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9])$

答案 8 :(得分:0)

您可以使用以下正则表达式:

^[0-1][0-9]:[0-5][0-9]$|^[2][0-3]:[0-5][0-9]$|^[2][3]:[0][0]$

答案 9 :(得分:0)

以下正则表达式将有助于验证hh:mm格式

^([0-1][0-9]|2[0-3]):[0-5][0-9]$

答案 10 :(得分:0)

声明

private static final String TIME24HOURS_PATTERN = "([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]";

public boolean validate(final String time) {
    pattern = Pattern.compile(TIME24HOURS_PATTERN);
    matcher = pattern.matcher(time);
    return matcher.matches();
}

当String与正则表达式匹配时,此方法返回“true”。

答案 11 :(得分:0)

当你问最左边的位是可选的时候,我已经做了最左边和最右边的位可选,检查出来

String Filepath = Txt_Attachfile.Text;
string accesToken = ConfigurationManager.AppSettings[&quot;AccessToken&quot;];
var u = new Uri(&quot;https://abc.visualstudio.com/&quot;);
VssCredentials c = new VssCredentials(new Microsoft.VisualStudio.Services.Common.VssBasicCredential(string.Empty, accesToken));
var connection = new VssConnection(u, c);
var workItemTracking = connection.GetClient&lt;WorkItemTrackingHttpClient&gt;();

string patchcontent = &quot;&quot;;
JsonPatchDocument patchDocument = new JsonPatchDocument();

if (Txt_Attachfile.Text != &quot;&quot;)
{
    string filename = Path.GetFileName(Txt_Attachfile.Text);
    Attachemt attachment = new Attachemt();
    attachment = UpdloadToStore(filename);

    patchDocument.Add(new JsonPatchOperation()
    {
        Operation = Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add,
        Path = &quot;/relations/-&quot;,
        Value = new
        {
            rel = &quot;AttachedFile&quot;,
            url = attachment.url,
            attributes = new
            {
                comment = &quot;VanDelay Industries - Spec&quot;
            }
        }
    });

    var result = workItemTracking.UpdateWorkItemAsync(patchDocument, Convert.ToInt32(workitem));              
    patchcontent = JsonConvert.SerializeObject(result);
}

匹配
^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]?$

实时链接可用here

答案 12 :(得分:0)

略微修改上述Manish M Demblani's贡献 处理凌晨4点 (我摆脱了秒部分,因为我在申请中不需要它)

^(([0-1]{0,1}[0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[1-9]|1[0-2])(:|\.)[0-5][0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[0-9]|1[0-9]|2[0-3])(:|\.)[0-5][0-9]))$

处理: 凌晨4点 凌晨4点 4:00 早上4:00 4:00 PM 凌晨4点30分  等。

答案 13 :(得分:0)

您的代码将无法正常使用,因为它不适用于01:00类型的格式。您可以对其进行如下修改。

pattern =r"^(0?[1-9]|1[0-2]):[0-5][0-9]$"

为了简化工作,我们可以使用变量来定义小时数限制。此外,我们可以添加子午线以获得更准确的结果。

hours_limit = 12 
pattern = r"^[1-hours_limit]:[0-5][0-9]\s?[AaPp][Mm]$"
print(re.search(pattern, "2:59 pm"))

答案 14 :(得分:-1)

检查我构建的masterfull timestamp detector正则表达式,以查找用户指定的时间戳,其中包含的内容示例包括,但绝对不限于此;

8:30-9:40
09:40-09 : 50
09 : 40-09 : 50
09:40 - 09 : 50
08:00to05:00
08 : 00to05 : 00
08:00 to 05:00
8am-09pm
08h00 till 17h00
8pm-5am
08h00,21h00
06pm untill 9am

只要时间包括数字

,它也会拾取更多

答案 15 :(得分:-1)

我的是:

^(1?[0-9]|2[0-3]):[0-5][0-9]$

这要短得多

用几个例子测试了它

匹配度:

  • 00:00
  • 7:43
  • 7时43
  • 19:00
  • 18时23分

并且不匹配任何无效的实例,例如25:76等......

答案 16 :(得分:-1)

您可以尝试以下

^\d{1,2}([:.]?\d{1,2})?([ ]?[a|p]m)?$

它可以检测以下模式:

2300 
23:00 
4 am 
4am 
4pm 
4 pm
04:30pm 
04:30 pm 
4:30pm 
4:30 pm
04.30pm
04.30 pm
4.30pm
4.30 pm
23:59 
0000 
00:00

答案 17 :(得分:-3)

尝试以下

^([0-2][0-3]:[0-5][0-9])|(0?[0-9]:[0-5][0-9])$

注意:我假设是javascript正则表达式引擎。如果不同,请告诉我。

答案 18 :(得分:-3)

您可以使用以下正则表达式:

^[0-2]?[0-3]:[0-5][0-9]$

我所做的只有最左边的数字是可选的。其余的正则表达式是相同的。