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