Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中匹配特定字符串格式_Php_Regex - Fatal编程技术网

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

在PHP中匹配特定字符串格式,php,regex,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 patt

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

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

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";
}
我是一个RegexNoob,我不知道为什么这不起作用


有人能帮我让这个正则表达式匹配工作吗?

首先:正则表达式应该以
/
开头/结尾(或


Second
-
是一个特殊符号,应使用
\

$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";
}

您可以这样尝试:

<?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.
    }
$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";
}


因为这似乎是时间,因此必须检查它
13:70
不是一个有效的时间,我想如果你不想接受13:71或25:12,你需要像这样扩展正则表达式:

<?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.
    }
$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";
}

布尔西!非常感谢你!我没有投反对票。这是第一个也是最有用的答案,解释了为什么我的正则表达式不起作用。@u_mulder我没有投反对票,但这仍然可以改进,因为13:61将通过这个正则表达式。我最初的问题只要求匹配模式。我不需要验证时间,只要模式匹配即可。所以这个答案完全回答了我提出的问题。@Richard,如果你根本不需要验证模式,或者只需要验证一点点。请注意,25:71的格式没有验证。就时间而言,字符串的格式总是正确的,所以我只需要检查格式模式,不验证时间。好的,然后你可以使用strlen($string)==13和$string[6]='-'XDNo,因为这样“AB:cD-Ef:11”就会通过,这根本不符合我原来的问题@u_mulder的答案很准确,完全回答了我的问题。我的意思是,如果另一个字符串保证格式正确,不要做任何验证,如果不保证,那么就做所有验证,这就是契约设计的精神。这样你就不会重复另一个人做过的工作。
-
是regexps中的一个特殊符号。谢谢,我忽略了它@多米尼克罗尔现在还好吗?是的,我们现在有了类似的答案。@u_mulder:不,这是错的。你的答案没有错,但没有解释最初的问题是什么。没有必要把俘虏小组放在任何地方。