Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.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 HTML输入只接受像';000:00';_Php_Html_Regex - Fatal编程技术网

Php HTML输入只接受像';000:00';

Php HTML输入只接受像';000:00';,php,html,regex,Php,Html,Regex,这是我的第一篇帖子(脸红…) 我需要有一个html允许从'000:00'到'999:59'的持续时间条目。它还应该允许诸如“1:01”之类的条目,但不带前导0(但不允许使用alpha字符)。 在拔出我的大部分头发后,我想出了这个,但没有用。事实上,Regex的事情是我最大的担忧。下面是: <input type="text" name="edDuration" id="edDuration" pattern="^(2[0-3]|[01]?[0-9]?[0-9]:([1-5]{1}[

这是我的第一篇帖子(脸红…) 我需要有一个html允许从'000:00'到'999:59'的持续时间条目。它还应该允许诸如“1:01”之类的条目,但不带前导0(但不允许使用alpha字符)。 在拔出我的大部分头发后,我想出了这个,但没有用。事实上,Regex的事情是我最大的担忧。下面是:

    <input type="text" name="edDuration" id="edDuration" pattern="^(2[0-3]|[01]?[0-9]?[0-9]:([1-5]{1}[0-9])$)" title="Format: hh:mm" style="position:relative;" value="000:00" maxlength="6" placeholder="000:00" onchange="myFunc">


提前谢谢你给我小费。Dan.

\d{1,3}:(\d|[0-5]\d)
这样的正则表达式可以工作

1:01 => match
12:13 => match
100:02 => match
1000:02 => not match
999:59 => match
999:60 => not match
说明:

\d{1,3}
匹配1到3位数字

匹配文本冒号,然后


(\d |[0-5]\d)
表示任何数字(一)-
\d
或两个数字-
[0-5]\d
,其中第一个数字是0-5,第二个数字是任何数字。

由于客户端数据永远无法完全信任,因此通常最好仍然在服务器上进行验证。您应该在客户机上进行验证,以便在服务器上保存额外的处理(这与问题无关,但它确实解决了您收到的一些评论)。我修改了正则表达式,允许整数没有部分(只有分钟,没有秒)



您已经将问题标记为“php”,但事实上,这个问题中没有php,答案中也不会有php;这个问题完全是前端问题。你想出的正则表达式有点乱;我建议重新开始,使用一个regex测试工具,例如,让您可以构建它,并在编写时看到它的工作情况。难道您不能使用
,让(现代)浏览器为您完成困难的部分吗?请参阅Simba和Ward-非常感谢您为我指出这些资源。令人惊叹的(答案太快了…难以置信)
^
$
在HTML5模式中是不必要的,默认情况下模式是锚定的。这就像一个魅力!问题解决了,谢谢你的解释。我采用了你的正则表达式,因为它允许像“16”这样的简单条目。然而,很遗憾,正则表达式不能在输入alpha字符时拒绝它们。我还将实现您建议的PHP验证。还感谢Regex模式ref.@stressless,您可以验证为客户端类型:|只需检查keyup和/或update,您就可以禁用提交,直到满足有效条件。
<html>
    <form method="POST" target="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
        <label for="dur">Duration:</label>
        <input id="dur" type="text" name="dur" pattern="^\d{1,3}(?::(?:[0-5]?\d))?$"></input>
        <input type="submit" name="submit"></input>
    </form>
</html>
<?php
if(!empty($_POST['dur'])){
    if(preg_match('/^\d{1,3}(?::(?:[0-5]?\d))?$/', $_POST['dur'])){
        echo $_POST['dur'] . ' is an acceptable duration.<br>';
    }else{
        throw new Exception($_POST['dur'] . ' does not match valid pattern');
    }
}
?>