验证时间输入仅在我在chrome调试器中附加断点时才有效

时间:2014-03-28 16:03:53

标签: javascript html

我有一些代码我要验证输入,我想创建自己的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();"/>

示例: http://jsfiddle.net/labithiotis/YSgUk/1/

3 个答案:

答案 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>