我有一些代码我要验证输入,我想创建自己的Validator,而不是在输入上使用时间类型,因为我也在设计样式。
但是,当我在if语句上设置断点时,当前代码不允许解析所需的字符[A-Z]。
想要添加到此处将值转换为始终格式化的时间(00:00和25:93> 23:59)
window.validateTimeInput = function(evt) {
var e = evt || window.event,
key = e.keyCode || e.which,
keyChar = String.fromCharCode(key),
regexChars = /[0-9]|\:/,
regexActions = /37|38|39|40|46|27|13|8/; // Left, Up, Right, Down, Delete, Escape, Enter, Backspace
// BREAK POINT HERE
if( ( regexChars.test(keyChar) ? false : !regexActions.test(key.toString()) ) && e.target.value.length >= 5 ){
e.returnValue = false;
if(e.preventDefault()) e.preventDefault();
//return false;
}
};
<input type="text" onkeydown="validateTimeInput();"/>
答案 0 :(得分:1)
问题在于你的正则表达式:/37|38|39|40|46|27|13|8/
。它太宽松了。
它允许字母&#34; r&#34;,键码82.因为/8/
允许字符串"82"
。 (也允许字母dnpqrstuvwxyDNPQRSTUVWXY。)
将正则表达式更改为:
/^(37|38|39|40|46|27|13|8)$/
答案 1 :(得分:0)
尝试从if语句中拉出该行,看看是否有助于缩小范围。您还可以将检查分开一些,而不是尝试在一行中运行它们。
$foo = regexChars.test(keyChar) ? false : !regexActions.test(key.toString();
if($foo){
...
}
答案 2 :(得分:0)
<?php
// $hd = curl_init("http://www.laleo.com/ebooks_android/ebooks_search_json.php");
// curl_setopt($hd,CURLOPT_POSTFIELDS,"query=deporte");
// curl_exec($hd);
// curl_close($hd);
?>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
var regexp1 = /^[0-2]{1}/;
var regexp2 = /^[0-9]{2}/;
var regexp3 = /^[0-9]{2}\:{1}/;
var regexp4 = /^[0-9]{2}\:{1}[0-5]{1}/;
var regexp5 = /^[0-9]{2}\:{1}[0-9]{2}$/;
$(function(){
$(":text").keyup(function(evt){
var curent = $(this);
if(curent.val().length == 1)
{
if(regexp1.test(curent.val()))
{
}
else
{
curent.val("");
}
}
else if(curent.val().length == 2)
{
if(regexp2.test(curent.val()) && curent.val() < 24)
{
}
else
{
curent.val(curent.val().slice(0,1));
}
}
else if(curent.val().length == 3)
{
if(regexp3.test(curent.val()))
{
}
else
{
curent.val(curent.val().slice(0,2));
}
}
else if(curent.val().length == 4)
{
if(regexp4.test(curent.val()))
{
}
else
{
curent.val(curent.val().slice(0,3));
}
}
else if(curent.val().length == 5)
{
if(regexp5.test(curent.val()))
{
}
else
{
curent.val(curent.val().slice(0,4));
}
}
else if(curent.val().length > 5)
{
curent.val(curent.val().slice(0,5));
}
});
});
</script>
</head>
<body>
<input type="text" />
</body>
</html>