在PHP中匹配特定的字符串格式

时间:2016-09-24 09:48:21

标签: php regex

我知道关于正则表达式和匹配有很多类似的问题,但我不能让它工作!

我需要检查我的字符串是否具有以下特定格式:

13:30 - 14:00

2个数字,冒号,2个数字,空格,短划线,空格,2个数字,冒号,2个数字

这是我迄今为止的最大努力......

$string = "13:30 - 14:00";
$regex = '^[0-9]{2}:[0-9]{2} - [0-9]{2}:[0-9]{2}$';
if (preg_match($regex, $string)) {
echo "matched pattern";
}

我是一个正则表达式的菜鸟,我不确定为什么这不起作用。

有人可以帮助我让这个正则表达式匹配起作用吗?

4 个答案:

答案 0 :(得分:1)

    $string = "13:30 - 14:00";    
    $regex = '/^([0-1][0-9]:[0-5][0-9])|(2[0-3]:[0-5][0-9])|(24:00) \- ([0-1][0-9]:[0-5][0-9])|(2[0-3]:[0-5][0-9])|(24:00)$/';    
    if(preg_match($regex, $string)){
        echo "matched pattern";
    }

似乎是时间,为此必须检查! 13:70不是我猜的有效时间

答案 1 :(得分:1)

如果您不想接受13:71或25:12,则需要像这样扩展正则表达式:

$string = "13:30 - 14:00";
$regex = '/^([0-1][0-9]|2[0-3]):[0-5][0-9] \- ([0-1][0-9]|2[0-3]):[0-5][0-9]$/';
if (preg_match($regex, $string)) {
    echo "matched pattern";
}

答案 2 :(得分:0)

首先:regexp应以/(或#)开头/结尾

第二次-是一个特殊符号,应使用\进行转义

$string = "13:30 - 14:00";
$regex = '/^[0-9]{2}:[0-9]{2} \- [0-9]{2}:[0-9]{2}$/';
if (preg_match($regex, $string)) {
    echo "matched pattern";
}

答案 3 :(得分:-1)

你可以这样试试:

<?php

    $strTime    = "13:30 - 14:00";
    $time       = '(\d{2})(:)(\d{2})';
    $rx         = '#^' . $time . '( \- )' . $time . '$#';

    if (preg_match($rx, $strTime)) {
        echo "Pattern was found...";
        // DO WHATEVER YOU WANT TO DO WHEN PATTERN IS MATCHED.
    }